在c#中介面和類有什麼異同?
不同點:
不能直接例項化介面。
介面不包含方法的實現。
介面可以多繼承,類只能單繼承。
類定義可以在不同的原始檔之間進行拆分。
相同點:
介面、類和結構都可以從多個介面繼承。
介面類似於抽象基類:繼承介面的任何非抽象型別都必須實現介面的所有成員。
介面和類都可以包含事件、索引器、屬性。
介面只能定義方法。
1. 類
類的分類有:抽象類(abstract)、密封類(sealed)、靜態類(static)
1.1 抽象類
關鍵字: abstract
使用目的:若所有子類擁有共同的特性,可以把這個特性放到乙個抽象類中,子類繼承此抽象類。
特點:1.不能被例項化;classname en=new classname();//這樣會報錯。
2.抽象成員必須包含在抽象類中。
3.抽象類除了抽象成員外,還可以包含別的成員(不用關鍵字 abstract)。
4.子類繼承抽象父類後,必須把父類中的所有抽象成員都重寫(非抽象成員不必重寫)。除非子類也是個抽象類。
5.抽象成員的訪問修飾符不能是private。
6.抽象類是有建構函式,雖然不能被例項化。
7.abstract不能用於字段成員,可定義成屬性。
8.abstract用於方法時,方法不能定義主體(內容)。
9.抽象類也可以實現介面,但要把介面的成員前面標記個abstract。
1.2 密封類
關鍵字: sealed
使用目的:不需要子類來繼承他。如 string;
特點:1.不能被繼承,如:string ,不能被繼承。
2.子類重寫後,前面加個sealed,那麼子類就不能再被繼承。
1.3 靜態類
關鍵字: static
使用目的:不需要例項化,可以直接類名引用靜態方法。比如 工具類。
特點:1.相似於sealed與abstract使用。
2.靜態成員在整個程式退出時才釋放資源,所以盡量別寫靜態字段、屬性。最好是靜態方法。
2. 介面
關鍵字: inte***ce
使用目的:抽象類所擁有的共性,也可以概括為:為了多型。
特點:1.介面中只能包含方法。(方法、屬性、索引器、事件)
2.介面中的方法不能有任何實現
3.介面中的成員不能有任何訪問修飾符(哪怕是public)
4.介面不能被例項化
5.實現介面的類,必須實現介面的所有成員(這裡跟抽象類一樣)
6.類不能多繼承,所以在某些情況下,只能用介面來代替。介面可以多實現(乙個類可以繼承多個介面,而只能繼承乙個類)
7.介面的主要目的就是為了實現多型
8.當乙個類,同時繼承了某個類,並且也實現了某些介面的時候,必須要將繼承的類寫在第乙個(如果乙個類同時繼承了父類和介面的時候,要把父類寫在最前面)
9.當多個類,都具有某個或某幾個功能時(方法),但是這幾個型別又不屬於相同的系列(這幾個型別沒有共同的父類,就不能用抽象類。),所以這時,為了實現多型就可以考慮把這幾個型別共有的方法提取到乙個介面中,讓這幾個型別分別實現該介面
10.當父類實現介面,子類繼承父類。那麼 介面就可以引用子類
11.不要在乙個介面中寫過多的方法,避免造成介面汙染。可編寫多個介面,在每個介面中,分別定義方法
12.實現介面方法的時候,不要有override關鍵字,直接跟平常定義一樣
13.介面方法的顯示實現,如果多個介面裡有相同的方法名。那麼第乙個方法名預設的引用的是排在最前面的介面,如果要使用後面介面的方法,就要顯示實現:介面名.方法名。訪問修飾符是private
介面抽象類
多繼承支援
不支援型別限制
沒有有,只能是引用型別
方法實現
繼承型別中必須給出方法實現
繼承類中可以不給出
擴充套件性比較麻煩
相對比較靈活
多層繼承
比較麻煩,需要借助虛函式
比較靈活
總的來說,介面和抽象類是.net為了更好的實現型別之間繼承關係而提供的語言手段,而且兩者有些相輔相成的關係。
抽象類和介面異同
抽象類 定義 抽象類往往用來表徵對問題領域進行分析 設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。用 abstract 修飾的類是抽象類,抽象類是不完整的,它只能用作基類。在物件導向方法中,抽象類主要用來進行型別隱藏和充當全域性變數的角色。特徵 抽象類不能例項化。不能用...
抽象類和介面異同
本文總結了在 c 當中,介面與抽象類的一些異同,來與大家共享。1 抽象方法只作宣告,而不包含實現,可以看成是沒有實現體的虛方法 2 抽象類不能被例項化 3 抽象類可以但不是必須有抽象屬性和抽象方法,但是一旦有了抽象方法,就一定要把這個類宣告為抽象類 4 具體派生類必須覆蓋基類的抽象方法 5 抽象派生...
C 抽象類和介面的異同
都可以被繼承 都不能被例項化 都可以包含方法宣告 區別 抽象基類可以定義字段,屬性,方法實現,建構函式。介面只能定義屬性,索引器,事件,方法宣告 抽象類是乙個不完整的類,需要進一步細化,而介面試試乙個行為規範 介面可以被多重繼承,抽象類只能被單一繼承 抽象類實現的具體方法預設為虛的,但實現介面的類中...