1.接口的概念:
- 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”。
- 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。
2. 接口的使用:
- 在程序中,如果想定义一个接口,需要使用interface关键字。
语法:访问修饰符 interface 接口名 { 抽象方法… } - 类与接口的关系为实现关系,即类实现接口。实现的动作类似继承,只是关键字不同,实现使用implements关键字,其他类(实现类)实现接口后,就相当于声明:”我具备这个接口中的功能”; 实现类中需要重写方法以实现具体的功能, 接口可以多实现,解决了多继承的弊端(多继承时,当多个父类中有相同功能时,子类调用会产生不确定性。其实核心原因就是在于多继承父类中功能有主体,而导致调用运行时,不确定运行哪个主体内容。为什么多实现能解决了呢?因为接口中的功能都没有方法体,由实现类来重写方法)
语法:
class 类 implements 接口1,接口2… {
重写接口中方法
}
3. 接口中的成员:
- 接口中可以定义变量,但是变量必须有固定的修饰符修饰,public static final,所以接口中的变量也称之为常量,其值不能改变
- 接口中可以定义方法,但不可以创建对象
- 实现类必须覆盖掉接口中所有的方法后,实现类才可以实例化。否则实现类是一个抽象类
4.多接口继承:
- 多个接口之间可以使用 extends 关键字继承
- 当多接口中有相同的方法,由于接口中的方法都是抽象方法,也不会出现调用的不确定性
5. 接口与抽象类的区别及选择:
- 区别:
(1) 抽象类中可以为部分方法提供实现, 避免子类重复实现这些方法, 提高代码重用性;而接口只能包含抽象方法
(2) 一个类只能继承一个父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)
(3) 抽象类是对象类中应该具备的内容,接口是对象类中额外添加的内容 - 二者的选用:
(1) 优先选用接口,尽量少用抽象类;
(2) 需要定义子类的行为,又要为子类提供共性功能时才选用抽象类;