读书人

接口和抽象类的区别

发布时间: 2012-10-26 10:30:59 作者: rapoo

接口跟抽象类的区别

学java一年多以来,一直对java的理论方面不是很明白,到现在才来扫盲呀。所以现在来好好的理解一下这个概念:

abstract class 和interface在java中都是用来进行抽象类,他们表示的是一个抽象体。

在面向对象的概念中,我们所知道的对象都是通过类来描绘的,但是反过来却不行。并不是所有的类都是用来描绘对象的,如果一个类中,没有包含最够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类往往用来表示我们在对问题领域进行分析,设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。例如:我们对一个人来进行描述,描述他有手,有脚,但是问题领域存在着有手,有脚的却并不一定是人,但是人却是有手,有脚的,它就是这样的一个抽象的概念,正式因为抽象的概念在问题领域没有对应的具体概念,所以用来表示抽象概念的抽象类是不可以被实例化的。

在面向对象中,抽象类主要用来进行类型掩藏。

?

从语法层面上看abstract class与interface:

java语言对abstract class和interface给出了不同的定义方式。

在抽象类中,可以有自己的数据成员,也可以有非abstract的成员方法,但是在接口interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在接口中一般不定义数据成员)所有的成员方法都是abstract的。所以,也可以这样说,interface是一种特殊形式的abstract class.

?

从coding方面来看:

abstract class和interface都可以用来实现“design by contract"的思想。

抽象类表示的是一种继承关系,但是一个类却可以实现多个interface.

在抽象类的定义中,我们可以赋予方法的默认行为,但是在接口中,方法却不可以有默认的行为。

?

从设计方面来看:

上面的层次都是比较低层次的。真正体现在本质上的还是在设计的理念上面。

抽象类表示的是 is a的关系,接口表示的是like a的关系。

?

?

希望大家对这个概念有了大概的了解。

?

?

?

读书人网 >编程

热点推荐