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