接口
一、什么是接口?
接口是功能的集合,是一种数据类型,是一种比抽象类更抽象的“类”。接口只具备所应该有的方法,并没有具体的实现类,接口的实现有接口的实现类来实现(相当于接口的子类)。
- 接口可以理解为一种特殊的抽象类,是由全局常量和公共的抽象方法组成的。JDK8以后可以接口中可以有default和static修饰的方法。
- 接口的作用是定规范,为了被继承。
- 接口属于复合类型
- 当抽象类中都是抽象方法时,该抽象类可以由抽象 方法来实现。
二、接口的作用?
接口将功能的定义和实现相分离,优化了程序设计
- 接口的出现扩展了功能
- 接口其实就是暴露出来的规则
- 接口的出现降低了耦合性,即设备与设备之间实现了解耦
- 为了弥补Java的单继承的局限性。
- 接口的出现扩展了功能,维护性好。
- 接口的出现降低了耦合性
三、接口的定义
interface关键字来定义接口
- 定义接口所在的仍为.Java文件
- 编译后仍会产生.class文件,所以接口可以认为只包含了功能声明的特殊类。
定义格式:
访问修饰符 interface 接口名称{
属性(全局常量)
抽象方法
}
-
全局常量,默认修饰符public static final可以省略一个或几个修饰符。
-
全局常量必须要初始化
-
接口中不能有普通的成员变量
-
抽象方法默认修饰符public abstract
-
接口里面不能有普通成员方法
-
JDK8以后,接口里可以有default修饰的方法,这个方法不能被接口子类重写。
-
接口里的静态方法不能被继承也不能被重写。
-
接口不能实例化
四、接口的实现
类接口的关系为实现关系,即类实现接口
子类通过implements关键字实现接口,在子类中覆盖接口中所有抽象类方法在类实现接口后,该类就会将接口中的抽象类方法继承过来,此时该类需要重写该类抽象方法,完成具体逻辑。
- 接口是不可以创建对象的,因为有抽象方法。需要被子类实现,子类对接口中所有抽象方法全部覆盖后,子类才可以实例化。否则子类还是抽象类。
- 接口可以被类多实现,不支持多继承。Java支持多实现。
五、接口的多实现
接口重要的体现:解决多继承的弊端。将多继承这种机制在Java中通过多实现完成。
-
多继承的弊端:
多继承是,当多个父类中有相同功能时,子类调用会产生不确定性。
多继承父类中功能有主体,而导致调用运行时,不确定运行哪个主体内容。
-
多实现怎么解决多继承的弊端:
接口中的功能都没有方法体,由子类来明确。
六、接口和类混搭
接口和继承混搭指的是子类既要继承抽象类,又要实现接口
- 接口的出现避免了单继承的局限性。父类中定义的事物的基本功能。接口中定义的事物的扩展功能。
七、接口的多继承
Java中,接口不允许继承抽象类,但是接口可以继承另外一个接口,而且接口允许多继承,多个接口之间可以使用extends进行继承。
八、抽象类和接口的区别:
比较内容 | 接口 | 抽象类 |
---|---|---|
定义 | 用interface关键字表示 | 用abstract关键字修饰类 |
组成 | 正常类成员+抽象方法 | 全局常量和抽象方法,可以有default和abstract修饰的方法 |
使用 | 使用implements关键字实现接口 | 需要一个类去继承它 |
关系 | 不可以继承普通类,可以继承接口和抽象类中的抽象方法,抽象类中的成员变量和成员方法不可以被继承(相当于接口) | 可以实现接口不能继承接口 |
局限性 | 多继承 | 单继承 |
构造方法 | 没有构造方法 | 有但不能创建对象 |