我要规范代码,直接写接口然后用一个类实现这个接口不就好了,抽象类在实际的开发中到底有没有什么独特的作用?
2 回答
紫衣仙女
TA贡献1839条经验 获得超15个赞
如果你看JDK的源码,就会发现,大部分情况下,你用到的方法,他的父类都是一个抽象类,而不是一个直接的接口。原因主要有两个,接口确实是用来定义规范的,同一个接口下,可能有大量不同的实现,举个例子,List这个接口booleanadd(Ee);booleanremove(Objecto);booleanaddAll(Collectionc);......但是你去看ArrayList,第一个继承的是AbstractList(抽象类),然后你去看LinkedList,第一个继承是AbstractSequentialList(抽象类),而AbstractSequentialList也是继承自AbstractList,你肯定知道ArrayList和LinkedList的区别咯。为什么这么做呢,因为有很多方法是可以复用的,比如publicintindexOf(Objecto);publicintlastIndexOf(Objecto);......如果你纯粹用接口的话,你需要写很多重复的代码,一旦修改,你就麻烦了。抽象类的目的在于,你可以更细致化的表明哪些是不同的,哪些是相同的。所以这就是接口和抽象类的简单区别。如果还不理解,你可以看看collection容器类的源码,就会发现了。
墨色风雨
TA贡献1853条经验 获得超6个赞
将部分共有代码在抽象类中实现。这里举一个在HEADFIRSTDESIGNPATTERNS中的一个例子。假设现在有各种各样的鸭子,比如橡皮鸭,野鸭。这些鸭子有的能飞有的不能飞,但是它们都有两个翅膀,都能发出声音。根据需求我们会得出以下实现。publicabstractclassDuck{privateWingleftWing;privateWingrightWing;publicvoidquack(){...//quackquack}}publicinterfaceFlyable{voidfly();}publicclassRubberDuckextendsDuckimplementsFlyable{publicvoidfly(){...//cannotfly}}publicclassNormalDuckextendsDuckimplementsFlyable{publicvoidfly(){...//flygracefully}}其实抽象类本质是为了提高代码的复用性。在JAVA中的应用还是很广泛的。比如说Collection接口之下的AbstractCollection抽象类。当你想要对某个接口进行默认实现,并且不希望在该实现上创建实例,那么抽象类是一个很好的选择。
添加回答
举报
0/150
提交
取消