A:成員的區(qū)別
抽象類:
構(gòu)造方法:有構(gòu)造方法颅痊,用于子類實例化使用。
成員變量:可以是變量局待,也可以是常量斑响。
成員方法:可以是抽象的,也可以是非抽象的钳榨。
接口:
構(gòu)造方法:沒有構(gòu)造方法
成員變量:只能是常量舰罚。默認修飾符:public static final
成員方法:jdk1.7只能是抽象的。默認修飾符:public abstract (推薦:默認修飾符請自己永遠手動給出)
jdk1.8可以寫以default和static開頭的具體方法
B:類和接口的關(guān)系區(qū)別
類與類:
繼承關(guān)系,只能單繼承薛耻∮眨可以多層繼承。
類與接口:
實現(xiàn)關(guān)系,可以單實現(xiàn),也可以多實現(xiàn)饼齿。
類還可以在繼承一個類的同時實現(xiàn)多個接口饲漾。
接口與接口:
繼承關(guān)系,可以單繼承,也可以多繼承。
C:體現(xiàn)的理念不同
抽象類里面定義的都是一個繼承體系中的共性內(nèi)容缕溉。
接口是功能的集合,是一個體系額外的功能考传,是暴露出來的規(guī)則。
你選擇使用接口和抽象類的依據(jù)是什么证鸥?
接口和抽象類的概念不一樣僚楞。接口是對動作的抽象勤晚,抽象類是對根源的抽象。
抽象類表示的是泉褐,這個對象是什么赐写。接口表示的是,這個對象能做什么膜赃。比如挺邀,男人,女人财剖,這兩個類(如果是類的話……)悠夯,他們的抽象類是人。說明躺坟,他們都是人沦补。
人可以吃東西,狗也可以吃東西咪橙,你可以把“吃東西”定義成一個接口夕膀,然后讓這些類去實現(xiàn)它.
所以,在高級語言上美侦,一個類只能繼承一個類(抽象類)(正如人不可能同時是生物和非生物)产舞,但是可以實現(xiàn)多個接口(吃飯接口、走路接口)菠剩。
當你關(guān)注一個事物的本質(zhì)的時候易猫,用抽象類;當你關(guān)注一個操作的時候具壮,用接口准颓。
抽象類的功能要遠超過接口,但是棺妓,定義抽象類的代價高攘已。因為高級語言來說(從實際設計上來說也是)每個類只能繼承一個類。在這個類中怜跑,你必須繼承或編寫出其所有子類的所有共性样勃。雖然接口在功能上會弱化許多,但是它只是針對一個動作的描述性芬。而且你可以在一個類中同時實現(xiàn)多個接口峡眶。在設計階段會降低難度。