java学习笔记-接口介绍
场景:一个类 所有方法都是抽象方法 将这个类定义为接口
接口是一个引用数据类型 它比接口还要抽象
意义
接口存在的两个重要意义:
1. 规则的定义
2. 程序的扩展性
接口的定义和特点
- 接口用关键字Interface来定义 接口不可以创建对象 public interface 接口名
- 接口不允许实例化
- 接口和类之间是实现关系 通过
public class 类名 implements 接口名{} - 接口的子类 要么重写接口中的所有抽象方法 要么自己定义为一个抽象类
- 接口和类之间的关系 一个类可以实现单个接口 也可以实现多个接口
接口中成员的特点
-
成员变量
只能是常量 默认修饰符 :public static final -
构造方法,没有 因为接口不可以实例化
-
成员方法 只能是抽象方法(JDK8 JDK9有所改变) 默认修饰符 public abstract
JDK8接口成员的特点
- 允许接口中定义非抽象方法,但是需要使用default关键字来修饰 ,这些方法即为默认方法 用来解决接口升级问题
- 格式 public default void show()
- 默认方法不需要进行重写 可以进行重写但是重写默认方法不需要添加default关键字
- 多个接口实现类 但是 多个接口存在相同的默认方法, 必须进行重写
- 接口允许定义静态方法 通过接口.静态方法 进行调用 不可以用实现类对象来调用
JDK9接口成员的特点
- 允许Private修饰的方法 静态方法也可以使用private static
接口使用思路
- 如果发现 一个类中所有的方法 都是抽象方法,那么就可以将该类改进为一个接口
- 涉及到接口大面积更新方法 而不想去修改每一个实现类 就可以将更新的方法 定义为带有 方法体的默认方法
- 希望默认方法 调用的更加简洁 考虑设计成static 去掉default
- 默认方法出现重复的代码 考虑抽取成私有方法 去掉default
类和接口之间的关系:
- 继承关系 单继承
- 实现关系 多接口实现
- 接口与接口之间的关系 继承关系 也可以多继承 如果多继承 存在冲突的方法 子接口 必须重写冲突的方法
- 如果一个类 又有继承 又有接口 如果直接父类和接口中出现了相同的方法 优先使用直接父类的方法