直通車:c#介面(inte***ce)、c#抽象類
二、兩者的使用場景
兩者都不能直接例項化
兩者都包含未實現的方法宣告
派生類必須實現未實現的方法,抽象類是抽象方法,介面是所有成員(不僅是方法還包括其他成員)
區別型別
介面抽象類
定義使用inte***ce
關鍵字定義
使用abstract
關鍵字定義
成員在介面中僅能定義成員,但不能有具體的實現
抽象類除了抽象成員以外,其他成員允許有具體的實現
成員變數
介面中定義的變數只能是公共的靜態的常量(public static final
)
抽象類中的變數是普通變數
宣告在介面中不能宣告字段,並且不能宣告任何私有成員,成員不能包含任何修飾符
在抽象類中能宣告任意成員,並能使用任何修飾符來修飾
繼承介面能使用類或者結構體來繼承,乙個介面可以繼承多個介面,但是介面不能繼承類
抽象類僅能使用類繼承,也就是說不能通過介面繼承,在類繼承介面的同時還可以繼承其他類,乙個類只能繼承乙個父類
實現在使用類來實現介面時,必須隱式或顯式地實現介面中的所有成員,否則需要將實現類定義為抽象類,並將介面中未實現的成員以抽象的方式實現
在使用類來繼承抽象類時,必須將抽象類中所有抽象成員實現,如果沒有將抽象成員全部實現,則必須將這個實現類定義為抽象類
實現方法
直接實現
使用override
關鍵字實現抽象方法
抽象級別高低
使用場景
介面是適合為不相關的類提供通用功能
抽象類主要用於關係密切的物件
如果建立的功能將在大範圍的全異物件間使用,則使用介面。如果要設計小而簡練的功能塊,則使用介面。
如果要設計大的功能單元,則使用抽象類。如果要在元件的所有實現間提供通用的已實現功能,則使用抽象類。
如果預計要建立元件的多個版本,則建立抽象類。抽象類提供簡單的方法來控制項版本。
抽象類主要用於關係密切的物件;而介面適合為不相關的類提供通用功能。
介面定義應該是具有專一功能性的,而不是多功能的,否則造成介面汙染。如果乙個類只是實現了這個介面的中乙個功能,而不得不去實現介面中的其他方法,就叫介面汙染;
抽象方法 抽象類 介面 介面和抽象類的區別
某個父類只知道子類因該包含什麼樣的方法,無法知道這些子類如何實現這些方法。抽象類包含該方法但沒有對該方法的具體實現。有抽象方法的類只能被定義為抽象類,抽象類裡可以沒有抽象方法。抽象方法和抽象類的規則 public abstract class shape private string color p...
c 介面和抽象類的區別
一 抽象類 抽象類是特殊的類,只是不能被例項化 除此以外,具有類的其他特性 重要的是抽象類可以包括抽象方法,這是普通類所不能的。抽象方法只能宣告於抽象類中,且不包含任何實現,派生類必須覆蓋它們。另外,抽象類可以派生自乙個抽象類,可以覆蓋基類的抽象方法也可以不覆蓋,如果不覆蓋,則其派生類必須覆蓋它們。...
c 介面和抽象類的區別
一 抽象類 抽象類是特殊的類,只是不能被例項化 除此以外,具有類的其他特性 重要的是抽象類可以包括抽象方法,這是普通類所不能的。抽象方法只能宣告於抽象類中,且不包含任何實現,派生類必須覆蓋它們。另外,抽象類可以派生自乙個抽象類,可以覆蓋基類的抽象方法也可以不覆蓋,如果不覆蓋,則其派生類必須覆蓋它們。...