接口
從“面向接口編程”的角度看,接口是一中思想層面上的用以實現(xiàn)多態(tài)、提高軟件靈活性和可維護行性的架構(gòu)部件。
從代碼的角度來看,接口是由幾個沒有主體代碼的方法定義組成的集合體,有唯一的名稱,可以被類或這其他接口繼承。
interface interfatceName
{
void Method1();
void Method2(int para1);
void Method3(string para2,string para3);
}
①接口不能被實例化
②接口只能包含方法聲明
③接口的成員包括:方法聲明、屬性、索引器、事件
④接口中不能包含:常量、字段(域)、構(gòu)造函數(shù)、析構(gòu)函數(shù)、靜態(tài)成員
⑤接口中的所有成員默認為public,因此接口中不能有private修飾符
⑥派生類必須實現(xiàn)接口的所有成員
⑦一個類可以直接實現(xiàn)多個接口,接口之間用逗號隔開
⑧一個接口可以有多個父接口,實現(xiàn)該接口的類必須實現(xiàn)父接口中的所有成員
⑨接口是對動作的抽象
⑩接口表示的是:這個對象能做什么
?接口更多的是在系統(tǒng)架構(gòu)設(shè)計方法發(fā)揮作用,主要用于定義模塊之間的通信契約
?接口是引用類型的
抽象類
簡單點說,含有abstract修飾符的類為抽象類,抽象類提供多個派生類共享基類的公共定義,能夠提供抽象方法和非抽象方法。
抽象類不能被實例化,必須通過繼承由派生類實現(xiàn)其抽象方法;
抽象類的派生類可以聲明為抽象類,即抽象派生類,抽象派生類可以覆蓋基類的方法也可以不覆蓋,其非抽象派生類必須覆蓋它們。
①抽象類不能被實例化
②抽象類中的抽象方法只作聲明,不包含實現(xiàn),可以看作沒有實現(xiàn)的虛方法
③抽象類可以有抽象屬性和抽象方法,但不是必須
④非抽象派生類必須覆蓋基類的抽象方法
⑤抽象派生類可以覆蓋基類的方法也可以不覆蓋
⑥抽象類是對根源的抽象
⑦抽象類表示的是:這個對象是什么
⑧抽象類在代碼實現(xiàn)方面發(fā)揮作用,可以實現(xiàn)代碼重用
⑨抽象方法聲明中不能使用static和virtual修飾符
相同點:
①都可以被繼承
②都不能被實例化
③都可以包含方法聲明
④派生類必須實現(xiàn)未實現(xiàn)的方法
不同點:
①抽象基類可以定義字段、屬性、方法實現(xiàn)。接口只能定義屬性、索引器、事件、方法聲明。
②抽象類是一個不完整的類,需要進一步細化。接口是一個行為規(guī)范。
③抽象類只能被單一繼承。接口可以被多重實現(xiàn)。
④抽象類更多的是定義在一系列緊密相關(guān)的類中。接口大多數(shù)是關(guān)系疏松但都實現(xiàn)某一功能的類中。
⑤抽象類是從一系類相關(guān)對象中抽象出來的概念,因此反應(yīng)的是事物的內(nèi)部共性。接口是為了滿足外部調(diào)用而定義的一個功能約定,因此反應(yīng)的是事物的外部特性。
⑥接口基本上不具備繼承的任何具體特點,它僅僅承諾了能夠調(diào)用的方法。
⑦接口可以用于支持回調(diào),而繼承不具備這個特點。
⑧抽象類實現(xiàn)的具體方法默認為虛。接口的類中方法默認是非虛的,當(dāng)然可以聲明為虛的。
⑨如果抽象類實現(xiàn)接口,則可以把接口中方法映射到抽象類中作為抽象方法而不必實現(xiàn),而在抽象類的子類中實現(xiàn)接口中的方法。
⑩抽象類只能作用于引用類型。接口可以作用于值類型和引用類型。