Java学习之:接口 Interface 的内容总结

  • 接口就是多个类的公共规范
  • 接口是一种引用数据类型,最重要的部分就是其中的抽象方法

接口

接口的定义

public interface 接口名称 {
}

接口定义中可以包含哪些 组成部分

  • Java7:
    • 常量
    • 抽象方法
  • Java8:
    • 常量
    • 抽象方法
    • 默认方法
    • 静态方法
  • Java9:
    • 常量
  • 抽象方法
  • 默认方法
  • 静态方法
  • 私有方法

接口中抽象方法的定义

  • 首先要创建一个 interfaceinterface 的创建与类的创建相似,只不过在 kind 中选择 interface 类型
    在这里插入图片描述
  • 与类中创建抽象方法的方式也类似,利用 public abstract 返回值类型 方法名称(参数列表);
    在这里插入图片描述
    • 接口当中的抽象方法,修饰符必须是两个固定的关键字 publicabstract
    • 这两个关键字可以省略,但是不能写别的,以下四种方法都是对的
      在这里插入图片描述

接口中抽象方法的使用

  • 接口不能直接使用,必须使用一个 “实现类” 来实现该接口

  • 使用格式: public class 实现类名称 implements 接口类名称

  • 接口的实现类必须覆盖重写(实现)接口中所有的抽象方法:去掉 abstract 关键字,加上方法体大括号
    在这里插入图片描述

  • 创建实现类的对象,进行使用

    在这里插入图片描述
    【注意事项】:

  • 如果该实现类中并没有覆盖重写接口中所有的抽象方法,那么这个实现类自己就必须是一个抽象类。

接口中的默认方法定义

  • 从 Java 8 开始,接口中允许定义默认方法
  • 格式:public default 返回值类型 方法名称(参数列表){ 方法体 }
  • 接口当中的默认方法,可以解决接口升级的问题

【常规使用接口的抽象方法】

  • 假设现在创建了一个接口,里面包含了一个抽象方法
  • 这个接口通过两个实现类来分别重写了抽象方法
  • 创建这两个实现类的对象,并对方法进行调用
    在这里插入图片描述

接口中默认方法的使用

【遇到接口升级的问题】

  • 如果现在要对接口的功能进行增加,如果贸然地在接口定义中添加其他的 “抽象方法”,那么对于已经存在的实现类,需要把这些在接口定义中新增加的抽象方法重新重写到这些已经存在的实现类中,那么这是非常麻烦的工作
  • 因此,这里就可以使用接口的默认方法来解决这些问题。
  • 对于已经存在的接口,有实现类的情况下,就可以通过添加默认方法来拓展接口的功能,如下:
    在这里插入图片描述
    • 并没有在实现类 A B 中重写新添加的方法,但是还是可以方便地使用

接口中的静态方法的定义

  • 静态方法的定义格式:public static 返回值类型 方法名称(参数列表){方法体}
    在这里插入图片描述

接口中的静态方法的使用

  • 与类中的静态方法类似,静态方法在类中只与类有关,而与对象无关,在接口中,静态方法依然如此,只与接口本身有关,与最后的实现对象无关。
  • 直接通过接口名称来调用静态方法,甚至不用创建实现类
    在这里插入图片描述

接口中的私有方法的定义和使用

  • 接口中的私有方法其根本目的是为了解决不同方法之间的代码重复问题:
    • 普通私有方法为了解决默认方法之间的代码重复问题
      在这里插入图片描述

    • 静态私有方法为了解决静态方法之间的代码重复问题
      在这里插入图片描述

接口中的常量的定义和使用

  • 接口当中也可以定义 “成员变量”,但必须使用 public static final 三个关键字修饰,从效果上看,这其实就是接口的【常量】

  • 定义格式:public static final 数据类型 常量名称 = 数据值
    在这里插入图片描述

    • public 代表谁都可以调用它,无论是接口范围内的方法还是接口范围外的
    • static 代表它属于接口本身,而与对象无关,可以直接使用接口的名称调用
    • final 代表它不可变
    • 接口中的常量,无论你是否写了这三个关键字,都是被这三个关键字修饰。如下的形式也照样被这三个关键字约束,因为这个 num 定义在 Interface 里面
      在这里插入图片描述
    • 接口当中的常量必须 进行赋值,不能不赋值
    • 接口中常量的名称,使用完全大写的字母,并且存在多个单词时,用下划线分隔
      在这里插入图片描述

接口知识的总结

在这里插入图片描述

接口实现过程中的注意事项

  • 接口不能存在静态代码块
    在这里插入图片描述

  • 接口不能存在构造方法:因为存在构造方法就能直接使用 new 来创建了,而接口不能直接用 new 来创建。
    在这里插入图片描述

  • 虽然对于一个类来说,其直接父类是唯一的,但是 一个类可以实现多个接口
    在这里插入图片描述

  • 如果一个实现类在实现多个接口的时候,这多个接口中存在的抽象方法存在重名的现象,那么只需要覆盖重写一次即可。A,B 接口中都存在抽象方法 methodAbs,但是在实现类中,只需要重写覆盖一次即可。
    在这里插入图片描述

  • 如果实现类(实现多接口的实现类)没有覆盖重写所有接口中的所有抽象方法,那么这个实现类就必须是一个抽象类

  • 如果实现类所实现的多个接口中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写
    在这里插入图片描述

  • 优先级:一个类如果直接父类当中的方法和接口当中的方法产生了冲突,那么优先考虑直接父类中的方法。
    在这里插入图片描述

接口和类之间的关系

  • 类与类之间是单继承的
  • 类与接口之间是多实现的。一个类可以实现多个接口
  • 接口与接口之间是多继承的,一个接口可以作为几个接口的子接口,同时具备几个父接口的方法。如下所示:
    在这里插入图片描述
    • 多个父接口当中的抽象方法如果重复,没关系,反正抽象方法没有方法体。
    • 但是多个父接口中的默认方法如果重复,有关系,子接口进行默认接口的方法重写即可,而且必须要带着 default 关键字。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暖仔会飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值