1. 程式人生 > >接口、抽象類的區別與共同點

接口、抽象類的區別與共同點

png 功能 系統 上層 http image 重寫 常量 div

接口和抽象類都是繼承樹的上層,他們的共同點如下:
1) 都是上層的抽象層。
2) 都不能被實例化
3) 都能包含抽象的方法,這些抽象的方法用於描述類具備的功能,但是不比提供具體的實現。
他們的區別如下:
1) 在抽象類中可以寫非抽象的方法,從而避免在子類中重復書寫他們,這樣可以提高代碼的復用性,這是抽象類的優勢;接口中只能有抽象的方法。
2) 一個類只能繼承一個直接父類,這個父類可以是具體的類也可是抽象類;但是一個類可以實現多個接口。
Java語言中類的繼承是單繼承原因是:當子類重寫父類方法的時候,或者隱藏父類的成員變量以及靜態方法的時候,JVM使用不同的綁定規則。如果一個類有多個直接的父類,那麽會使綁定規則變得更復雜。為了簡化軟件的體系結構和綁定機制,java語言禁止多繼承。
接口可以多繼承,是因為接口中只有抽象方法,沒有靜態方法和非常量的屬性,只有接口的實現類才會重寫接口中方法。因此一個類有多個接口也不會增加JVM的綁定機制和復雜度。
對於已經存在的繼承樹,可以方便的從類中抽象出新的接口,但是從類中抽象出新的抽象類就不那麽容易了,因此接口更有利於軟件系統的維護和重構。

圖中如果Sparrow繼承類Bird 類 ,Boyin繼承Airplane類,Sparrow 和Boyin想使用同樣的flay方法那麽是沒有辦法實現的,因為類的繼承是單繼承。
技術分享

如果Bird和Airplane是接口那麽Boyin想使用同樣的flay方法就很簡單了。在寫一個接口讓Sparrow和Boyin實現這個接口就可以了如下圖:

技術分享

原文地址:https://www.zhihu.com/question/20149818?sort=created

接口、抽象類的區別與共同點