[C # 讀書筆記]interface 介面 abstract
來源:互聯網
上載者:User
抽象類別和介面一般不容易區分,個人覺得介面比抽象類別更加抽象。0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ª8f
抽象類別用來列舉一個類所需要的行為但不明確提供每個行為的具體實現方法。0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ª8f
當從抽象基類派生一個類時,衍生類別將繼承基類所有的特性,它可以通過 override關鍵字用具體版本替換繼承下來的
抽象方法。0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ª8f
如果該衍生類別沒有從抽象基類繼承下來的所有抽象方法提供具體實現,那麼該衍生類別也是抽象類別。0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ª8f
0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ª8f
實現一個介面,概念上類似在擴充一個抽象類別時填充其抽象方法,而兩者的區別是:0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ª8f
0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ª8f
1.對於介面我們只抽象行為,而抽象類別經常會包含具體的attribute,以及一些抽象行為和具體行為。0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ª8f
從某種程度來講,介面要比抽象類別更為抽象,因為介面留下了更多的想象空間(抽象是從眾多的事物中抽取出共同的、本質性的特徵,而捨棄其非本質的特徵。例如蘋果、香蕉、生梨、葡萄、桃子等,它們共同的特性就是水果。得出水果概念的過程,就是一個抽象的過程。要抽象,就必須進行比較,沒有比較就無法找到共同的部分。)0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ª8f
2.當從一個抽象類別派生一個非抽象類別時,衍生類別通過覆載手段,提供抽象方法具體實現,其方法頭一定會包括override關鍵字。當一個類實現一個介面時,必須提供介面中聲明的所有方法的具體實現。實作類別並不覆載他們。0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ª8f
3.抽象類別不一定要覆載基類的所有抽象方法,如果有一個或多個抽象方法沒有覆載那麼該衍生類別也是一個抽象方法。0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ª8f
4.一個類只能從一個基類派生,而一個類可以實現多個介面,同時介面可以作為資料類型返回。0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ª8f
0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ª8f
從文法上看兩者的區別為:0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ª8f
1.抽象類別可能會聲明資料結構(attribute),而介面不聲明attribtute.0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ª8f
2.抽象類別使用關鍵字abstract聲明抽象方法,並添加其可訪問性,而介面不能加Public或者Abstract關鍵字,而使用interface。0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ª8f
3.抽象類別可能會聲明具體方法,而介面不聲明具體方法。0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ª8f
4.基類從抽象類別繼承所有的attribute,而且可以添加本身的attribute。而基類實現介面的時候必須提供自己的attribute,而介面無法提供。(例如繼承來的變數,抽象類別提供,而介面無法提供)0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ª8f
5.基類可以覆載從抽象類別繼承的抽象方法,而基類必須全部實現介面的方法,無需使用override關鍵字。0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ª8f