抽象类是从多个类中抽象出来的模板,在此基础上如果将这种抽象进行的更彻底,那么就可以提炼出一种更特殊
的“抽象类”------接口,接口里不能包含普通方法,接口里的所有方法都是抽象方法。
我们知道类是一种具体实现体,而接口定义了一种规范,接口定义了某一批类所需要遵守的规范,接口不关心这些
类的内部状态数据,也不关心这些类里方法的实现细节,它只规定这批类里必须提供某些方法,提供这些方法的类
就可以满足实际需要。可见,就看就是从多个相似类中抽象出来的规范,接口不提供任何实现。接口体现的是规范
和实现分离的设计哲学。
让规范和实现分离正是接口的好处,让软件系统的各组件之间面向接口耦合,是一种松耦合的设计。类似的,软件
系统的各模块之间也应该采用这种面向接口的耦合,从而尽量降低各模块之间的耦合,为系统提供更好的可扩展性
和可维护性。因此,接口定义的是多个类共同的公共行为规范,这些行为是与外部交流的通道,这就意味着接口里
通常是定义一组公用方法。
在定义接口时,使用interface关键字,一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类。常见
的接口定义如下:
public interface Interface extends Interface1,Interface2{ public static final int COUNT=0; public abstract void interface0(); }
方法(只能是抽象实例方法)、内部类(包括内部接口、枚举)定义。
由前面可知,接口里定义的是多个类共同个公共行为规范,因此接口里的所有成员,包括常量、方法、内部类和枚
举都是public访问权限。定义接口成员时,可以省略访问控制修饰符,如果知道访问控制修饰符,则只能使用public
访问控制修饰符。
对于接口里定义的常量Field而言,它们是接口相关的,而且它们只能是常量,因此系统会自动为这些Field增加
static和final两个修饰符。也就是说,在接口中定义Field时,不管是否使用public static final修饰符,接口里的Field总
将使用这三个修饰符来修饰。而且,接口里没有构造器和初始化块,因此接口里定义的Field只能在定义时指定默认
值。
对于接口里定义的方法而言,它们只能是抽象方法,因此系统会自动为其增加abstract修饰符,由于接口里的方法
全部是抽象方法,因此接口里不允许定义静态方法,即不可使用static修饰接口里定义的方法,不管定义接口里方法
时是否使用pulic abstract修饰符,接口里的方法总是使用public abstract来修饰。
在Java中类是不支持多继承的,为了弥补这个,Java提供了接口的多继承,也就是说,接口完全支持多继承,一个
接口可以有多个直接父接口。和类继承相似,子接口扩展某个父接口,将会获得父接口里定义的所有抽象方法,常
量。一个接口继承多个父接口时,像上面的代码,多个父接口排在extends关键字之后,多个父接口之间以英文逗号
隔开。
关于接口和抽象类的相似点如下:
1、接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承。
2、接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。
但接口和抽象类之间的差别非常大,这种差别主要体现在二者的设计目的上。接口作为系统与外界交互的窗口,接
口体现的是一种规范。对于接口的实现者而言,接口规定了实现者必须向外提供哪些服务(以方法的形式来提
供);对于接口的调用者而言,接口规定了调用者可以调用哪些服务,以及如何调用这些服务(如何来调用方
法)。
抽象类则不一样,抽象类作为系统中多个子类的共同父类,它所体现的是一种模板式设计。抽象类作为多个子类的
抽象父类,可以被当成系统实现过程中的中间产品,这个中间产品已经实现了系统的部分功能(已经提供实现的方
法),但这个产品依然不能当成最终产品,必须更进一步的完善。
因此抽象类和接口存在以下差别:
1、接口里只能包含抽象方法,不包含已经提供实现的方法;抽象类则完全可以包含普通方法。
2、接口里不能定义静态方法;抽象类里可以定义静态方法。
3、接口里只能定义静态常量,不能定义普通的常量;抽象类里则既可以定义普通常量,也可以定义静态常量。
4、接口里不包含构造器;抽象类里可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让其子类调用
这些构造器来完成属于抽象类的初始化操作。
5、接口里不能包含初始化块;但抽象类则完全可以包含初始化块。
6、一个类最多只能有一个直接父类,包括抽象类;但一个类可以直接实现多个接口,通过实现多个接口可以弥补
Java单继承的不足。
转载请注明出处:http://blog.csdn.net/hai_qing_xu_kong/article/details/43882813
情绪控_
原文地址:http://blog.csdn.net/hai_qing_xu_kong/article/details/43882813