抽象類
抽象類提供多個派生類共享基類的公共定義,它既可以提供抽象方法,也可以提供非抽象方法。抽象類不能例項化,必須通過繼承由派生類實現其抽象方法,因此對抽象類不能使用new關鍵字,也不能被密封。如果派生類沒有實現所有的抽象方法,則該派生類也必須宣告為抽象類。否則,必須實現抽象類的方法和屬性,實現抽象方法由override方法來實現,從抽象類派生的非抽象類必須包括繼承的所有抽象方法和抽象訪問器的實實現。在抽象方法宣告中不能使用 static 或 virtual 修飾符。
繼承
乙個類可以繼承多個介面 , 注意繼承藉口 ,當乙個類繼承某個介面時,它不僅要實現該介面定義的所有方法,還要實現該介面從其他介面中繼承的所有方法 ,. 但只能繼承乙個類, 這個類不能是sealed . 如果類定義了虛方法,可用ovverider 重寫virtual .
介面
介面是包含一組虛方法的抽象型別,其中每一種方法都有其名稱、引數和返回值。介面方法不能包含任何實現,clr允許介面可以包含事件、屬性、索引器、靜態方法、靜態字段、靜態建構函式以及常數。但是注意:c#中不能包含任何靜態成員。乙個類可以實現多個介面,當乙個類繼承某個介面時,它不僅要實現該介面定義的所有方法,還要實現該介面從其他介面中繼承的所有方法。
抽象類 與 介面
不同點和相同點:
3.1 相同點
都不能被直接例項化,都可以通過繼承實現其抽象方法。
都是面向抽象程式設計的技術基礎,實現了諸多的設計模式。
3.2 不同點
介面支援多繼承;抽象類不能實現多繼承。
介面只能定義抽象規則;抽象類既可以定義規則,還可能提供已實現的成員。
介面是一組行為規範;抽象類是乙個不完全的類,著重族的概念。
介面可以用於支援**;抽象類不能實現**,因為繼承不支援。
介面只包含方法、屬性、索引器、事件的簽名,但不能定義欄位和包含實現的方法;抽象類可以定義字段、屬性、包含有實現的方法。
介面可以作用於值型別和引用型別;抽象類只能作用於引用型別。例如,struct就可以繼承介面,而不能繼承類。
通過相同與不同的比較,我們只能說介面和抽象類,各有所長,但無優略。在實際的程式設計實踐中,我們要視具體情況來酌情量才,但是以下的經驗和積累,或許能給大家一些啟示,除了我的一些積累之外,很多都**於經典,我相信經得起考驗。所以在規則與場合中,我們學習這些經典,最重要的是學以致用,當然我將以一家之言博大家之笑,看官請繼續。
3.3 規則與場合
請記住,物件導向思想的乙個最重要的原則就是:面向介面程式設計。
借助介面和抽象類,23個設計模式中的很多思想被巧妙的實現了,我認為其精髓簡單說來就是:面向抽象程式設計。
抽象類應主要用於關係密切的物件,而介面最適合為不相關的類提供通用功能。
介面著重於can-do關係型別,而抽象類則偏重於is-a式的關係;
介面多定義物件的行為;抽象類多定義物件的屬性;
介面定義可以使用public、protected、internal 和private修飾符,但是幾乎所有的介面都定義為public,原因就不必多說了。
「介面不變」,是應該考慮的重要因素。所以,在由介面增加擴充套件時,應該增加新的介面,而不能更改現有介面。
盡量將介面設計成功能單一的功能塊,以.net framework為例,idisposable、idisposable、icomparable、iequatable、ienumerable等都只包含乙個公共方法。
介面名稱前面的大寫字母「i」是乙個約定,正如欄位名以下劃線開頭一樣,請堅持這些原則。
在介面中,所有的方法都預設為public。
如果預計會出現版本問題,可以建立「抽象類」。例如,建立了狗(dog)、雞(chicken)和鴨(duck),那麼應該考慮抽象出動物(animal)來應對以後可能出現風馬牛的事情。而向介面中新增新成員則會強制要求修改所有派生類,並重新編譯,所以版本式的問題最好以抽象類來實現。
從抽象類派生的非抽象類必須包括繼承的所有抽象方法和抽象訪問器的實實現。
對抽象類不能使用new關鍵字,也不能被密封,原因是抽象類不能被例項化。
在抽象方法宣告中不能使用 static 或 virtual 修飾符。
以上的規則,我就厚顏無恥的暫定為t14條吧,寫的這麼累,就當一時的獎賞吧。大家也可以互通有無,我將及時修訂。
msdn的建議是:
如果預計要建立元件的多個版本,則建立抽象類。抽象類提供簡單易行的方法來控制項版本。通過更新基類,所有繼承類都隨更改自動更新。另一方面,介面一旦建立就不能更改。如果需要介面的新版本,必須建立乙個全新的介面。
如果建立的功能將在大範圍的全異物件間使用,則使用介面。抽象類應主要用於關係密切的物件,而介面最適合為不相關的類提供通用功能。
如果要設計小而簡練的功能塊,則使用介面。如果要設計大的功能單元,則使用抽象類。
如果要在元件的所有實現間提供通用的已實現功能,則使用抽象類。抽象類允許部分實現類,而介面不包含任何成員的實現。
繼承 多型 抽象類 介面
繼承 這個世界到處是繼承的例子比如動物是乙個最基礎的物件,人 豬 貓貓 狗狗都從動物繼承了基本的屬性和方法。繼承就是乙個層次結構,先抽象出乙個基本的東西,然後具體的物件從這個基本的東西來繼承,繼承後再寫他特有的,這樣就可以做到復用了。隱藏 如果基類和繼承類裡有一樣的方法,在子類裡呼叫的時候會怎麼樣,...
深入繼承 抽象類和介面
抽象方法 當類中的方法在宣告的時候加上 abstract 關鍵字的時候,稱為abstract method 但是只有在抽象類和介面中才可以使用抽象方法。舉個例子 public abstract class person public abstract string getmore 定義乙個抽象的方法...
習題 抽象類 繼承 介面綜合
設計乙個系統 門的實現過程 流程 設計一張抽象的門door,那麼對於這張門來說,就應該擁有所有門的共性,開門opendoor 和關門closedoor 然後對門進行另外的功能設計,防盜 theftproof 防水 waterproof 防彈 bulletproof 防火 防鏽 要求 利用繼承 抽象類...