- 接口(interface)的概念,掌握接口很重要,以后所有的编程都要面向接口编程。其实接口的内涵就7个字:规范和实现分离。
抽象类是从多个类中抽象出来的模板,若要将这种抽象进行得更彻底,就得用到一种特殊的“抽象类”:接口。
生活中听说过的USB接口其实并不是我们所看到的那些插槽,而是那些插槽所遵循的一种规范;而我们看到的那些插槽是根据USB规范设计出来的实例而已,也就说插槽是USB的实例;对应不同型号的USB设备而言,他们各自的USB插槽都需要遵循一个规范,遵守这个规范就可以保证插入插槽的设备能与主板正常通信;对于同一种型号的主板上的多个USB插槽,他们有相同的数据交换方式,相同的实现细节,可认为他们都是同一个类的不同实例。- 接口,类,对象示意图
接口只定义了类应当遵循的规范,却不关心这些类的内部数据和其方法内的实现细节。
接口只规定了这些类里必须提供的方法,从而分离了规范和实现,增强了系统的可拓展性和维护性。- interface定义
[修饰符] interface 接口名 extends 父接口1,父接口2....
1,没有构造方法,不能实例化
2,接口只能继承接口,不能继承类
3,接口里没有普通方法,方法全是抽象的4,接口里的方法默认修饰符是public abstract
5,接口里的字段全是全局常量,默认修饰符是public static final
接口里的成员包括:全局常量,公共的抽象方法,内部类(包括内部类,内部接口,内部枚举类)。主要是前两个。
接口的名字,符合标识符就OK,一般的我们习惯在接口名前加上"I"字母,用于区分类和接口,一般的,若接口叫IUSB,习惯上把它的实现类(子类)类写为MouseUSBImpl,主要是方便阅读
- 使用接口
格式:public class SubImpl extends Super implements IA,IB。实现接口(支持多实现)
[修饰符] class 类名 implements 接口1,接口2...1,接口的实现必须在 extends 之后
2,实现接口的方法必须是 public 类型
3,接口不能创建实例,但是可以声明引用类型的变量。
此时,引用类型的变量必须指向到其实现类对象。IStudent s = new String();
IStudent s = new StudentImpl();
- 接口和抽象类
相同点:
1,都位于继承的顶端,用于被其他实现或继承
2,都不能实例化
3,都包含抽象方法,其子类都必须覆写这些抽象方法
区别:
1,抽象类为部分方法提供实现,避免子类重复实现这些方法,提供代码重用性;接口只能包含抽象方法2,一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)
优先选用接口,尽量少用抽象类,编程时都是面向接口编程的
需要定义子类的行为,又要为子类提供共性功能时才选用抽象类,其实主要是模板。