抽象類和接口的區別與應用場景

接口和抽象類有什麼區別

在應用場景下,選擇使用接口和抽象類的依據是什麼?


一、抽象類和接口在語法上的異同:

1、相同點

都不能被實例化

2、不同點     

第一點. 接口是抽象類的變體,接口比抽象類更加抽象,接口中所有的方法都是抽象的。
第二點. 每個類只能繼承一個抽象類,但是可以實現多個接口
第三點.抽象類中不一定都是抽象方法,抽象的而抽象類可以實現部分方法。但是接口中方法必須爲public修飾的、抽象的不能實現具體的法。
第四點. 接口中基本數據類型爲static 而抽象類不是的。


二、應用場景

應用都是基於規則的應用,也就是基於語法的應用,我們可以根據語法上的異同點來總結抽象類和接口的應用場景

相同點沒有什麼可說的,我們從不同點下手。


1、第一個重要的不同點就是,

抽象類中不一定都是抽象的方法,也可以有具體實現的方法,這樣就可以把大家公用的方法提升到抽象類中,然後具體的方法可以留給子類自己實現(此處經典的應用,模板方法設計模式)。所以抽象類可以更好的實現代碼的複用


2、另一個重要的不同就是類可以實現多個接口。

接口和抽象類的概念不一樣。這個可以理解爲接口是對動作的抽象,抽象類是對根源的抽象(即對本質的抽象與其他類的本質不同)。

抽象類表示的是,這個對象是什麼。接口表示的是,這個對象能做什麼。比如,男人,女人,這兩個類(如果是類的話……),他們的抽象類是人。說明,他們都是人。人可以吃東西,狗也可以吃東西,你可以把“吃東西”定義成一個接口,然後讓這些類去實現它.

所以,在高級語言上,一個類只能繼承一個類(抽象類)(正如人不可能同時是生物和非生物),但是可以實現多個接口(吃飯接口、走路接口)。

當你關注一個事物的本質的時候,用抽象類;當你關注一個操作的時候,用接口。

另一個重要的概念就是多態,多態通過分離做什麼和怎麼做,從另一個角度將接口和實現分離出來。多態不但能夠改善代碼的組織結果和可讀性,還能創建可擴展的程序----即無論在項目最初創建時還是在需要添加新功能時都可以“生長”的程序。由於接口更關注於動作的實現,多態主要是分離“做什麼”和“怎麼做”,所以接口的另一個重要的應用就是多態的實現(當然抽象類也可以實現多態,但是接口更加合適)。


抽象類的功能要遠超過接口,但是,定義抽象類的代價高。因爲高級語言來說(從實際設計上來說也是)每個類只能繼承一個類。在這個類中,你必須繼承或編寫出其所有子類的所有共性。雖然接口在功能上會弱化許多,但是它只是針對一個動作的描述。而且你可以在一個類中同時實現多個接口。在設計階段會降低難度的。

(參考:http://blog.csdn.net/fenglibing/article/details/2745123,

 《java編程思想》)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章