linkin大话面向对象--接口

  • 接口(interface)的概念,掌握接口很重要,以后所有的编程都要面向接口编程。其实接口的内涵就7个字:规范和实现分离。

抽象类是从多个类中抽象出来的模板,若要将这种抽象进行得更彻底,就得用到一种特殊的“抽象类”:接口。

生活中听说过的USB接口其实并不是我们所看到的那些插槽,而是那些插槽所遵循的一种规范;而我们看到的那些插槽是根据USB规范设计出来的实例而已,也就说插槽是USB的实例;对应不同型号的USB设备而言,他们各自的USB插槽都需要遵循一个规范,遵守这个规范就可以保证插入插槽的设备能与主板正常通信;对于同一种型号的主板上的多个USB插槽,他们有相同的数据交换方式,相同的实现细节,可认为他们都是同一个类的不同实例。

  • 接口,类,对象示意图

linkin大话面向对象--接口

接口只定义了类应当遵循的规范,却不关心这些类的内部数据和其方法内的实现细节。

接口只规定了这些类里必须提供的方法,从而分离了规范和实现,增强了系统的可拓展性和维护性。





  • 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();



  • 接口和抽象类

linkin大话面向对象--接口

相同点:

1,都位于继承的顶端,用于被其他实现或继承

2,都不能实例化

3,都包含抽象方法,其子类都必须覆写这些抽象方法



区别:

1,抽象类为部分方法提供实现,避免子类重复实现这些方法,提供代码重用性;接口只能包含抽象方法

2,一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)



二者的选用:

优先选用接口,尽量少用抽象类,编程时都是面向接口编程的

需要定义子类的行为,又要为子类提供共性功能时才选用抽象类,其实主要是模板。



上一篇:linkin大话面向对象--类和对象


下一篇:C#设计模式——抽象工厂模式(Abstract Factory Pattern)