接口和抽象

来源:互联网 发布:meng豹2a4淘宝 编辑:程序博客网 时间:2024/05/13 00:02

接口和抽象都很像,它们都具有如下特征:

(1)接口和抽象类都不能被实例化,它们都位于继树的顶端,用于被其它类实现和继承

(2)接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。

       但接口和抽象类之间的差别非常大,这种差别主要体现在二者设计目的上,下面具体分析两者的差别。

       接口作为系统与外界交互的窗口,接口体现的是一种规范。从某种程度上来看,接口类似于某个系统的“总纲”,它制定了系统各模块应该遵循的标准,因此一个系统的接口不应该经常改变。一旦接口被改变,对整个系统甚至其他系统的影响将会是辐射式的。导致系统中大部分类都需要改写。

       抽象类则不一样,抽象类作为系统中多个子类的共同父类,它体现的是一种模板式设计。抽象父类作为多个子类的抽象父类,可以被当成系统实现过程中的中间产品,这个中间产品已经实现了系统的部分功能(那些已经提供实现的方法),但这个产品依然不能当成最终产品,必须有有更进一步的完善,这种完善可能有几种不同方式。

       除此之外,接口和抽序类在用法上也存在如下差别:

(1)接口里只能包含抽象方法,不包含已经提供实现的方法;抽象类则完全可以包含普通方法。

(2)接口里不能定义静态方法;抽象类里可以定义静态方法。

(3)接口里只能定义静态常量属性,不能定义普通属性;抽象类里则既可以定义普通属性,也可以定义静态常量属性。

(4)接口不包含构造器;抽象类里可以包含构造器,抽象类里的构造器不是用于创建对象,而让其子类调用这些构造器来完成属于抽象类的初始操作。

(5)接口里不能包含初始化块,但抽象类则完全可以包含初始化块。

(6)一个类最多只能有一直接父类,包括抽象类;但一个类可以直接实现多个接口。

原创粉丝点击