關於定義,網路或者書籍中有相當多的解釋和描述,這邊只用形象的說法來解釋,易於理解最重要。
簡單的說,抽象類就是對物件的抽象,用於進行型別隱藏。如:小狗、小貓都屬於寵物,都會叫,要吃和睡。這時,我們要定義類的話:
最原始的方法,就是寫兩個類。但是很多東西是重複的,暫先不考慮多型的使用。這時,我們把相同的東西做乙個抽象,小狗小貓都屬於寵物,那麼就做乙個父類pet,操作相同則可以抽象出來,操作和內容都相同的部分,則可以在抽象類中定義為一種預設操作:
這樣我們的**更加精簡,而且使用起來更加靈活(能夠支援多型):
介面則是一種行為規範,介面中只包含各種行為的方法宣告,而不寫具體方法體,各類都需要寫自己的方法體,都具有不同的實現。介面是一種特殊形式的抽象類:
他們都是物件的抽象,只不過介面比抽象類更加抽象。
1)都不能被例項化;
2)都能包含抽象方法(介面中的方法都預設是抽象方法,抽象類中則需要宣告為抽象方法,兩者都只能宣告,不能包含方法體);
介面:1)表現一種實現關係(implements),「like a 」,只是一種契約規範;
2)多實現,乙個類可以實現多個介面;
3)成員變數預設都是static final的,方法預設都是抽象的(abstract);
4)實現類需要實現介面中的所有方法;
抽象類:
1)表現的是繼承關係(extends),「is a」,要求派生類和父類在概念本質上是相同的;
2)單一繼承,乙個類只能繼承乙個抽象類(另:介面是可以繼承多個類的);
3)成員變數和方法都可以自己宣告各自的修飾符;
4)抽象(abstract)方法派生類必須繼承,其他方法則可以作為一種預設操作,也可以派生類自己重寫父類方法;
通過以上的解釋與比對,可以看到:
介面是一種極其抽象的契約規範,大家都可以服從某種規範,但是不一定要全部一樣;
抽象類則是類的抽象,可以包含抽象方法宣告(子類必須自己寫方法體);也可以有具體的方法操作(視為一種預設操作),當然子類可以對此方法進行重寫。
也就是說,抽象類更容易被擴充套件(可以方便的在抽象類中增加預設操作,而不需要修改子類),是類和介面之間的乙個橋梁,融合了兩者的優點。
菜鳥一枚,難免有錯,敬請指正,共同進步!
介面與抽象類
介面與抽象類區別 個人總結 語法結構 1 型別可以繼承多個介面,但是只能繼承乙個抽象類,即不支援多重繼承。2 介面可以用於值型別和引用型別,例如struct和class,而抽象類不能用於值型別,只能用於引用型別。3 抽象類定義可以包括建構函式,字段資料,非抽象成員 具體實現 等,而介面只能包括抽象成...
介面與抽象類
抽象類 當抽象類作為父類時,他的子類對其中的抽象類方法有不同的方法體 簡單舉例為 classhorse mammal,ilangbound public int numeroflegs return 4 inte ce ilandbound int numberoflegs 介面例子 main函式 ...
抽象類與介面
記住抽象類與普通類的唯一區別就是不能建立例項物件和允許有abstract 方法含有abstract 修飾符的 class 即為抽象類,abstract 類不能建立的例項物件。含有 abstract 方法的類必須定義為 abstract class abstract class 類中的方法不必是抽象的...