C 抽象類和介面

2021-06-21 21:35:29 字數 2956 閱讀 5941

物件導向的程式設計,並不是類越多越好,類的劃分是為了封裝,但分類的基礎是抽象,具有相同屬性和功能的物件的抽象集合才是類。在類的基礎上進行抽象,那麼便是抽象類。

比如黑貓,白貓,小貓,大貓,它們的共同特點就是屬於貓,那麼貓就是乙個類,同樣狗也是乙個類。在貓狗的基礎上,因為它們均屬於動物,那麼動物便是它們的乙個共同的類,由於我們無法描述乙個動物是什麼什麼的,這樣的類便是抽象類。

具體抽象類是:它代表乙個抽象的概念,它提供乙個繼承的出發點,當設計乙個新的抽象類時,一定是用來繼承的,所以,在乙個以繼承關係形成的等級結構裡面,樹葉節點應當是具體類,樹枝節點均應是抽象類。

一、抽象類是不能例項化的。

二、抽象方法可以看成是沒有具體實現體的虛方法。

三、如果類中包含抽象方法,那麼類必須定義為抽象類,不論是否還包含其他的一般方法。

介面是把隱式公共方法與屬性組合起來,以封裝特定功能的乙個集合。一旦類實現了介面,類就可以支援介面所指定的所有屬性和成員。宣告介面在語法上與宣告抽象類完全相同,但是不允許提供介面中任何成員的執行方式。

一、介面不能例項化,不能有構造方法和字段。

二、不能有修飾符,比如public、private等等。

三、不能宣告虛擬的或靜態的等。

四、實現介面的類必須要實現介面中所有方法和屬性。

五、乙個類可以支援多個介面,多個類也可以支援相同的介面。

六、介面的命名,前面要加乙個大寫的「i」。

七、注意介面用inte***ce宣告,而不是class。

class animal   

set}

public animal(string name)

public animal()

public string shout()

protected virtual string getshoutsound()

}

具體實現

class cat : animal     //同理也是

public cat(string name)

: base(name)

protected override string getshoutsound()

}

第一段**同抽象類的第一段

inte***ce ichange

具體實現

class machinecat : cat, ichange

public machinecat(string name):base(name)

public string changething(string thing)

}

對比分析形態上區分:l  抽象類是可以給出一些成員的具體實現,但是介面卻不包含成員的實現。l  抽象類的抽象成員可以被子類部分實現,但是介面的成員需要實現類完全實現。

l  乙個類只能繼承乙個抽象類,但是可以實現多個介面等等。

還可以從另外三點區別:

u  類是對物件的抽象,抽象類是對類的抽象,而介面是對於行為的抽象。

u  如果行為跨越不同類的物件,可使用介面。對於一些相似的類物件用繼承抽象類。

u  從設計上講,抽象類是從子類中發現了公共的東西,泛化出父類,然後子類繼承父類。舉例:有乙個貓類,又有乙個狗類,於是泛化出動物類。而介面是根本不知子類的存在,方法如何實現還不確認,預先定義。舉例:舉辦動物運動會,因為事先不知道會有什麼動物來參加運動會,比賽專案也不知什麼動物參加,所以事先只能定義這些比賽專案的行為介面。

小結:

抽象類和介面也是依賴倒轉原則的乙個關鍵。

依賴倒轉原則:

a.

高層模組不應該依賴於低層模組。兩個都應該依賴於抽象。

b.

抽象不應該依賴於細節,而細節應該依賴於抽象。

依賴倒轉其實是物件導向設計的標誌,用哪種語言來編寫程式不重要,如果編寫時考慮的都是如何針對抽象程式設計而不是針對細節程式設計,即程式中所有的依賴關係都是終止於抽象類或者介面,那麼,就是物件導向的設計。

此外介面和抽象類的實現並不衝突,我們可以讓超人繼承人類,然後實現飛行介面。

C 抽象類和介面

net 提供了介面,這個不同於 class 或者struct 的型別定義。介面有些情況,看似和抽象類一樣,因此有些人認為在 net 可以完全用介面來替換抽象類。其實不然,介面和抽象類各有長處和缺陷,因此往往在應用當中,兩者要結合來使用,從而互補長短。接下來先說說抽象類和介面的區別。區別一,兩者表達的...

C 抽象類和介面

抽象類和介面有什麼區別?有了抽象類為什麼還要介面?介面和抽象類的相同點是都不能例項化,不同點是介面中的方法都沒有方法體,而抽象類則不然,除了抽象方法沒有方法體外,其他方法都有方法體。原因是 在c 中,類只能繼承乙個類,但可繼承多個介面。抽象類 1 不能例項化 2 抽象方法必須被子類重寫 3 如果類中...

C 介面 類和抽象類

乙個類可以同時繼承類和介面,或者抽象類和介面,抽象類和類不能在乙個類的繼承列表中同時出現。如果子類同時繼承類,抽象類和介面,一定要把類或者抽象類寫在前面,介面寫在後面,類名和介面名之是用 隔開,介面沒有先後順序。每一種繼承要根據各自的規則去實現。如果希望學生都具有姓名 性別 年齡和學號等屬性,當可以...