一、概念
1.定义
接口是 Java 中一种引用数据类型,使用 interface 关键字定义,本质是一套行为规范、功能标准。接口只声明方法(做什么),不具体实现(怎么做),用来约束实现类必须具备指定行为。
2.核心特点
(1)接口没有构造方法,不能被实例化,无法通过 new 直接创建对象。
(2)接口中不包含实例变量,成员有固定修饰符(可省略,编译器自动补全)。
(3)接口和类是并列的结构,编译后同样生成 .class 字节码文件。
(4)接口不能创建对象,但是可以声明引用。
(5)接口中的属性都是公开、静态、常量(默认的被 public static final 修饰)
必须在定义时直接赋值,后续无法修改;
全局静态常量,可以通过接口名。常量名直接访问。
(6)接口中的方法都是公开、抽象方法(默认的被 public abstract 修饰)
只有方法声明,没有方法体;
所有实现类必须重写该抽象方法。
注意:接口不是类
二、实现类
类想要遵守接口的规范,需要实现接口,使用关键字 implements 。
1.语法:class 类名 implements 接口名{ }
核心特点:一个类可以同时实现多个接口,这是 Java 弥补类单继承限制的重要方式。
2.方法权限要求
接口中抽象方法默认是 public ,因此重写时,访问权限只能是 public,不能使用默认、protected、private 。
3.应用:接口名 引用名 = new 实现类类名(实参);
注意:接口类型的引用指向实现类的对象,多态的应用。 → 强制使用多态。
三、接口的继承性
接口和接口之间可以发生继承,使用关键字 extends ,和类继承语法一致,但规则差异很大。
1.接口支持多继承:一个子接口可以同时继承多个父接口;
2.子接口会全盘继承父接口的所有成员(常量、抽象方法、默认方法、静态方法、私有方法除外)。
3.接口继承的本质:合并多个接口的规范,扩充行为标准。
四、接口多继承的影响
如果引用之间相互强制类型转换,转换的一方为接口类型的引用,则编译一定通过,但是运行的时候分以下两种情况:
(1)引用中实际存储的对象类型和要转换的类型一致,则运行通过
(2)引用中实际存储的对象类型和要转换的类型不一致,则运行报错,错误信息为:
java.lang.ClassCasException(类型转换异常)
接口静态方法重名:接口静态方法只属于当前接口,不会被继承,因此不存在冲突,调用时用对应接口名即可。
五、接口的作用
1.统一行为规范
接口定义一套标准,强制所有实现类遵守相同的行为定义。
2.弥补 Java 类的单继承缺陷
Java 中类只能单继承,但一个类可以实现多个接口,变相实现“多继承”,拓展类的功能。
3.降低代码耦合度
面向接口编程,而非面向实现类编程
(1)上层代码只依赖接口,不依赖具体实现类;
(2)后续替换、新增实现类时,无需修改原有业务代码,符合开闭原则。
4.实现多态
接口引用指向实现类对象,结合向上转型,实现多态效果,是多态的重要载体。
六、接口的回调
1.接口回调:接口定义之后,先有接口的使用者,再有接口的实现者。
2.注意:遇到接口回调的应用,开发人员需要关注的是根据接口规范,给予接口的实现部分。
接口和抽象类的区别
接口 抽象
关键字 interface abstract class
继承方式 类使用 extends,单继承 类使用 implements,多实现;接口可多继承
构造方法 有构造方法 无构造方法
成员变量 普通变量、静态变量、常量都可,可修改 只能是 public static final 常量,不可修改
普通方法 实例方法、静态方法、私有方法都支持 JDK8+有default/static方法,JDK9+有 private方法
抽象方法 可以有 JDK7 全是抽象方法
代码块 支持静态 / 实例代码块 不支持任何代码块
权限修饰 四种权限都可用 成员默认 public,不能用private / protected
关系语义 is-a(是一个,从属关系) like-a(具备能力,行为规范)





