Java基础的重点知识-08-接口、多态

文章目录

  • 接口
  • 多态

接口

从之前的章节中,我们了解到类的内部封装了成员变量、构造方法、成员方法,那么接口的内部主要就是封装了方法,包含了抽象方法(JDK7及之前),默认方法和静态方法(JDK8)、私有方法(JDK9)。

  • 接口的使用,它不能创建对象,但是可以被实现( implements ,类似于被继承)。一个实现接口的类(可以看做是接口的子类),需要实现接口中所有的抽象方法,创建该类对象,就可以调用方法了,否则它必须是一个抽象类。
public interface Animal {
    public abstract void action();

    public default void eat() { // JDK7版本之后支持
        // 执行语句
    }
    public static void work() { // JDK7版本之后支持
        // 执行语句
    }

   /* private void sleep() { // JDK8版本之后支持
        // 执行语句
    }*/
}

class Dog implements Animal{

    @Override
    public void eat() {
        Animal.super.eat();
    }

    @Override
    public void action() {

    }
}

abstract class Cat implements Animal{

}

从上述代码中,我们可以看到,如果说通过implements 实现了接口但是没有实现接口中的全部抽象方法就要定义为抽象类,不然就必须实现接口中的抽象方法,不然就会报错。

非抽象子类实现接口:

  • 必须重写接口中所有抽象方法。
  • 继承了接口的默认方法,即可以直接调用,也可以重写。
  • 默认方法的使用:可以继承,可以重写,二选一,但是只能通过实现类的对象来调用。
  • 静态方法的使用:静态与.class 文件相关,只能使用接口名调用,不可以通过实现类的类名或者实现类的对象调用
  • 私有方法的使用:私有方法只有默认方法可以调用,私有静态方法默认方法和静态方法都可以调用

私有的方法是对默认方法和静态方法的辅助

接口的多实现:
一个类可以继承一个父类同时实现多个接口,一个接口可以继承多个接口

class 类名 [extends 父类名] implements 接口名1,接口名2,接口名3... {
	// 重写接口中抽象方法【必须】
	// 重写接口中默认方法【不重名时可选】
}
  • 对于抽象方法:如果抽象方法有重名的,只需要重写一次
  • 对于默认方法:如果默认方法有重名的,必须重写一次
  • 接口中,存在同名的静态方法并不会冲突,原因是只能通过各自接口名访问静态方法。

注意:

  • 接口中,无法定义成员变量,但是可以定义常量,其值不可以改变,默认使用public static final修饰。
  • 接口中,没有构造方法,不能创建对象。
  • 接口中,没有静态代码块。
package demo02;

public interface Animal extends Biology,World{
    public abstract void action();

    public default void eat() { // JDK7版本之后支持
        // 执行语句
    }
    public static void work() { // JDK7版本之后支持
        // 执行语句
    }

   /* private void sleep() { // JDK8版本之后支持
        // 执行语句
    }*/
}
interface Biology{

}
interface World {

}

class Dog implements Animal,World{

    @Override
    public void eat() {
        Animal.super.eat();
    }

    @Override
    public void action() {

    }
}

abstract class Cat implements Animal{

}

从上述代码中我们可以看到,Dog类多接口实现,实现了Aniaml(动物接口)、World(世界接口)。Animal接口多继承了Biology(生物接口)、World(世界接口)。这里的代码就体现出了,接口的多继承,以及类的多实现。

多态

多态是继封装、继承之后,面向对象的第三大特性。

  • 多态就是同一行为,通过不同的事物,可以体现出来的不同的形态。

这里以跑这个行为为例,猫咪、小狗、人跑起来的动作是不一样的,也就是说跑这个行为,在不同的三个事物上显现出来了不同的形态。

package demo02;

public interface Animal {
    public abstract void eat();

    public static void showCatEat (Cat c){
        c.eat();
    }
    public static void showDogEat (Dog d){
        d.eat();
    }
    public static void showAnimalEat (Animal a){
        a.eat();
    }

    public static void main(String[] args) {
        Dog dog = new Dog();
        Cat cat = new Cat();

        showCatEat(cat);
        showDogEat(dog);
        showAnimalEat(cat);
        showAnimalEat(dog);
    }
}


class Dog implements Animal{

    @Override
    public void eat() {
        System.out.println("吃骨头");
    }
}

class Cat implements Animal{

    @Override
    public void eat() {
        System.out.println("吃鱼");
    }
}

在这里插入图片描述
由于多态特性的支持,showAnimalEat方法的Animal类型,是Cat和Dog的父类类型,父类类型接收子类对象,当然可以把Cat对象和Dog对象,传递给方法。当eat方法执行时,多态规定,执行的是子类重写的方法,那么效果自然与showCatEat、showDogEat方法一致,所以showAnimalEat完全可以替代以上两方法。不仅仅是替代,在扩展性方面,无论之后再多的子类出现,我们都不需要编写showXxxEat方法了,直接使用showAnimalEat都可以完成。所以,多态的好处,体现在,可以使程序编写的更简单,并有良好的扩展。

引用类型转换:

  • 向上转型:多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的。
  • 向下转型:父类类型向子类类型向下转换的过程,这个过程是强制的。

当我们的父类想要调用子类中拥有的方法但是父类中却没有的方法的时候就要进行向下转型。但是这里有个要注意的点就是在我们编写代码的过程中很有可能会出现类型转换异常。这时我们就要使用到instanceof关键字了。

代码示例:

package demo02;

public interface Animal {
    public abstract void eat();

    public static void main(String[] args) {
        Animal animal = new Cat();
        Dog dog = (Dog) animal;
        dog.lookHome();

    }
}


class Dog implements Animal{

    @Override
    public void eat() {
        System.out.println("吃骨头");
    }

    public void lookHome(){
        System.out.println("看家");
    }
}

class Cat implements Animal{
    @Override
    public void eat() {
        System.out.println("吃鱼");
    }
}

在这里插入图片描述
这里我们需要使用instanceof关键字来判断一下了,不然很有可能出现类型转换异常。

public interface Animal {
    public abstract void eat();

    public static void main(String[] args) {
        Animal animal = new Cat();
        if (animal instanceof Dog) {
            Dog dog = (Dog) animal;
            dog.lookHome();
        } else if (animal instanceof Cat) {
            Cat cat = (Cat) animal;
        }
    }
}


class Dog implements Animal {

    @Override
    public void eat() {
        System.out.println("吃骨头");
    }

    public void lookHome() {
        System.out.println("看家");
    }
}

class Cat implements Animal {
    @Override
    public void eat() {
        System.out.println("吃鱼");
    }
}

欢迎java热爱者了解文章,作者将会持续更新中,期待各位友友的关注和收藏。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/739523.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

思看科技冲刺上市疑云:募资用途遭强烈质疑,IPO前突击分红

近日,思看科技(杭州)股份有限公司(下称“思看科技”)已更新提交2023年最新财务资料,重启科创板IPO进程。贝多财经了解到,思看科技的上市申请于2023年6月获上交所受理,目前已进入问询…

yarn:终极包管理器指南 - 提高您的项目效率和性能

Yarn使用教程大纲 一、介绍1.1 什么是Yarn1.2 Yarn的优势1.3 Yarn与npm的比较 二、安装Yarn2.1 Windows安装Yarn2.2 macOS安装Yarn2.3 Linux安装Yarn2.4 注意事项 三、初始化项目3.1 在项目中使用Yarn3.2 创建新项目3.3 在已有项目中使用Yarn 四、添加依赖4.1 添加依赖4.1.1 安…

【Pandas驯化-15】Pandas中几个特征工程函get_dummies、factorize、diff、rank技巧

【Pandas驯化-15】Pandas中几个特征工程函get_dummies、factorize、diff、rank技巧 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! 🎇 相关内…

磨坊中年轻的面包师

磨坊中年轻的面包师 The young baker in the mill 每天清晨(early morning),喜欢裸睡(sleep naked)的面包师(baker)在面包房(bakery)中醒来(wake up)后,就会到湖(lake)边取水,在刷(brushing)牙洗(washing)脸后,他就会开始烘焙(ba…

Linux_应用篇(22) 音频应用编程

ALPHA I.MX6U 开发板支持音频,板上搭载了音频编解码芯片 WM8960,支持播放以及录音功能!本章我们来学习 Linux 下的音频应用编程, 音频应用编程相比于前面几个章节所介绍的内容、 其难度有所上升, 但是笔者仅向大家介绍…

【源码】含70演示高转化率Magento2外贸时装女装跨境电商模板V1.2.2

MagMog是下一代最高转化率和可扩展的跨境电商Magento2主题,让您几乎可以立即上手。这是一个终极解决方案:主题附带一系列电子商务功能,可以启用您商店的隐藏功能,并且您无需支付任何额外费用。 100% 免费。 MagMog从定制设计到内…

焦化超低排平台组成部分

焦化行业作为重工业的重要组成部分,其环保问题一直备受关注。近年来,随着环保意识的提升和技术的不断进步,朗观视觉焦化超低排平台应运而生,成为推动焦化行业绿色发展的重要力量。本文将深入剖析焦化超低排平台的组成部分&#xf…

《梦醒蝶飞:释放Excel函数与公式的力量》4.3常用OR函数

Excel中的OR函数是一种逻辑函数,它用于检查多个条件中至少有一个是否满足。如果任何一个条件为TRUE,OR函数将返回TRUE;如果所有条件都为FALSE,OR函数将返回FALSE。 1) OR函数的基本语法是:OR(logical1, [logical2], .…

超声波眼镜清洗机是交智商税吗?四样超卓超声波清洗机独具特色

相信大家都知道超声波清洗机,每次眼镜脏的时候,去眼镜店里让老板帮忙清洗,她们用的就是超声波清洗机,通过超声波的原理深入物品深处清洁,清洁效果非常好。相对手洗的方式,超声波清洗机能够保护镜片在清洗过…

Java开发-实际工作经验和技巧-0001-PostgreSQL数据库存储磁盘满了重启以及应急措施

Java开发-实际工作经验和技巧-0001-PostgreSQL数据库存储磁盘满了重启以及应急措施 更多内容欢迎关注我(持续更新中,欢迎Star✨) Github:CodeZeng1998/Java-Developer-Work-Note 技术公众号:CodeZeng1998&#xff0…

1964springboot VUE小程序在线学习管理系统开发mysql数据库uniapp开发java编程计算机网页源码maven项目

一、源码特点 springboot VUE uniapp 小程序 在线学习管理系统是一套完善的完整信息管理类型系统,结合springboot框架uniapp和VUE完成本系统,对理解vue java编程开发语言有帮助系统采用springboot框架(MVC模式开发),…

stm32学习笔记---EXTI外部中断(理论部分)

目录 STM32的中断 NVIC的基本结构 中断的优先级 优先级分组 EXTI(Extern Interrupt)外部中断 支持的触发方式 支持的GPIO口 外部中断占用的通道 外部中断的触发响应方式 外部中断的基本结构 GPIO口的外设 AFIO中断引脚选择 EXTI边沿检测及控…

Mac角色扮演游戏推荐:仙剑奇侠传四 for Mac 安装包

《仙剑奇侠传四》拥有精美的画面、优秀的音乐和丰富的剧情内容,成为了仙剑系列中的经典作品之一。游戏在发行后获得了极高的口碑和销量,成为了仙剑系列中的经典之作。在游戏中,玩家将扮演不同的角色,进行冒险探索、与各种敌人战斗…

FEP分液漏斗Teflon耐酸碱四氟耐腐蚀耐高温250ml

FEP分液漏斗:也叫特氟龙分液漏斗、特氟龙梨型分液漏斗等。广泛应用于痕量分析、超痕量分析、ICP-MS分析、同位素分析等实验。 规格参考:125ml、250ml、500ml、1000ml 其主要特性有: 1.内壁对溶剂无粘贴性和吸附,可完全排空&…

NFTScan | 06.17~06.23 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期:2024.06.17~ 2024.06.23 NFT Hot News 01/ Slerf 将向其 NFT 持有者空投,快照将在几小时内拍摄 6 月 17 日,Slerf 宣布将为其 NFT 持有者准备空投,快…

python基于Selenium的web自动化框架

1 什么是selenium Selenium 是一个基于浏览器的自动化工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid: Selenium IDE:Firefox的一个…

DevOps进阶(三):走近 DevOps 工程师_devops的进阶(1)

一、前言 在软件开发生命周期中,通常会遇到以下两个瓶颈: 在需求分析和系统开发阶段之间,针对不断变化的需求,对软件开发者提出了高要求,所以出现了敏捷开发方法论,强调需求敏捷响应、快速迭代、持续交付。…

捷云等保一体机 产品服务一站式等保合规交付解决方案

等保2.0的变化 2019 年 5 月 13 日,网络安全等级保护制度 2.0 国家标准(简称“等保 2.0”)正式发布,将等保 2.0 基本要求、测评要求、安全设计技术要求框架统一为安全管理中心支持下的三重防护结构框架。定级对象在按照等保 2.0 …

海外仓系统有哪些优势?智能WMS系统和传统模式的区别分析

随着跨境电商市场的发展,海外仓的管理已经变成了一项越来越复杂的工作,对海外仓企业而言,也需要一种更高效的方式来确保仓库运转的高效和准确。 通常来说,海外仓的解决方案是WMS海外仓系统,这是一种综合性的海外仓管理…

Linux命令----wc,uniq,sort的用法

1.wc的用法:wc 命令用于计算文件中的行数、单词数和字节数。 常用选项 -l:只显示行数-w:只显示单词数-c:只显示字节数-m:只显示字符数(与 -c 类似,但处理多字节字符)-L&#xff1a…