`
minijack
  • 浏览: 21650 次
  • 性别: Icon_minigender_1
  • 来自: 江苏泰州
最近访客 更多访客>>
社区版块
存档分类
最新评论

接口VS抽象类

 
阅读更多
大致浏览了一下网上关于接口和抽象类的文章,文章稂莠不齐,水平有高有低。本人不才,只能做一个总结者,理了理这些文章的观点。

抽象类和接口是java语言对于定义进行抽象的两种机制,其实java面向对象很大程度上是取决于抽象的。在面向对象的概念中,把所有的对象都通过类来描述,但是反过来不是所有的类都是用来描述对象的,如果一个类中没有包含足够的信息来描述一个具体的对象,这样的类就是抽象对象。抽象类一般是用来描述我们在问题领域分析和设计中得到的抽象概念,是对一系列看上去不同本质上却相同的具体概念的抽象。比如说:

本文将从两个方面来阐述接口与抽象类的关系。 

其一: 从基本语法的层面上来谈
数据成员:在abstract class方式中,Demo可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface方式的实现中,Demo只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。从某种意义上说,interface是一种特殊形式的abstract class。
          其二: 从具体使用角度来谈
多继承与单继承:abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。也许,这是Java语言的设计者在考虑Java对于多重继承的支持方面的一种折中考虑吧。
方法上:在abstract class的定义中,我们可以赋予方法的默认行为。但是在interface的定义中,方法却不能拥有默认行为,为了绕过这个限制,必须使用委托,但是这会 增加一些复杂性,有时会造成很大的麻烦。
          其三 :从设计理念层面来谈 
从前面抽象类的具体实现类的实现方式可以看出,其实在Java中,抽象类和具体实现类之间是一种继承关系,也就是说如果采用抽象类的方式,则父类和子类在概念上应该是相同的,但接口却不一样,如果采用接口的方式,则父类和子类在概念上不要求相同,接口只是抽取相互之间没有关系的类的共同特征,而不去关注类之间的关系,它可以使没有层次关系的类具有相同的行为。因此,可以这样说:抽象类是对一组具有相同属性和方法的逻辑上有关系的事物的一种抽象,而接口则是对一组具有相同属性和方法的逻辑上不相关的事物的一种抽象。抽象类是“is-a”而 接口是“like-a”的关系。
                    本文原创,转载请标明出处!
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics