C 它 抽象類和介面

2022-10-11 05:54:12 字數 1850 閱讀 2388

抽象類

c#同意把類和方法宣告為abstract,即抽象類和抽象方法。抽象類通常代表乙個抽象概念,它提供乙個繼承的出發點,當設計乙個新的物件類時,一定是用來繼承的,所以,在乙個以繼承關係形成的等級結構裡面,樹葉節點應當是詳細類,而樹枝節點均應當是抽象類。抽象類擁有盡可能多的共同**,擁有盡可能少的資料。

注意:1.抽象類不能例項化;2.抽象方法是必須被子類重寫的方法。3.假設類中包括抽象方法,那麼類就必須定義為抽象類。不論是否還包括其它一般方法。

介面

介面是把隱式公共方法和屬性組合起來,以封裝特定功能的乙個集合。一旦類實現了介面,類就能夠支援介面所指定的全部屬性和成員。宣告介面在語法上與宣告抽象類全然同樣,但不同意提供介面中不論什麼成員的執行方式。

所以介面不能例項化。不能有構造方法和字段;不能有修飾符,比方public、private等;不能宣告虛擬的或靜態的等。還有實現介面的類就必需要實現介面中的全部方法和屬性。

介面用inte***ce宣告。而不是class。介面名稱前要加『i',介面中的方法或屬性前面不能有修飾符、方法沒有方法體。

抽象類與介面的差別:

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

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

從設計角度講。抽象類是從子類中發現公共的東西,泛化出父類,然後子類繼承父類。而介面是根本不知子類的存在,方法怎樣實現還不確認,預先定義。

抽象類和介面都包括能夠由派生類繼承的成員。介面和抽象類都不能直接例項化,但能夠宣告這些型別的變數。假設這樣做,就能夠使用多型性把繼承這兩種型別的物件指定給他們的變數。

接著通過這些變數來使用這些型別的成員。但不能直接訪問派生物件的其它成員。

派生類僅僅能繼承乙個基類。即僅僅能夠直接繼承乙個抽象類(可是能夠用乙個繼承鏈包括多個抽象類)。相反,類能夠使用隨意多個介面。但這不會產生太大的差別——這兩種情況取得的效果是類似的,僅僅是採用介面的方式略有不同。

抽象類能夠擁有抽象成員(沒有**體,且必須在派生類中實現,否則派生類本身必須也是抽象的)用非抽象成員(它們擁有**體。也能夠是虛擬的,這樣就能夠在派生類中重寫)。

還有一方面。介面成員必須都在使用介面的類上實現——它們沒有**體。另外,依照定義。介面成員是公共的(由於它們傾向於在外部使用),但抽象類的成員能夠是私有的(僅僅要它們不是抽象的)、受保護的、內部的或受保護的內部成員(當中受保護的內部成員僅僅能在應用程式的**或派生類中訪問)。

此外,介面不能包括字段、建構函式、析構函式、靜態成員或常量。

抽象類主要用作物件系列的基類,共享某些主要特性,比如。共同的目的和結構。

介面則主要用於類,這些類在基礎水平上有所不同,但仍能夠完畢某些同樣的任務。

抽象類能夠給出一些成員的實現,介面卻不包括成員的實現,抽象類的抽象成員可被子類部分實現,介面的成員須要實現類全然實現,乙個類智慧型繼承乙個抽象類。但可實現多個介面等等。

C 抽象類和介面

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

C 抽象類和介面

物件導向的程式設計,並不是類越多越好,類的劃分是為了封裝,但分類的基礎是抽象,具有相同屬性和功能的物件的抽象集合才是類。在類的基礎上進行抽象,那麼便是抽象類。比如黑貓,白貓,小貓,大貓,它們的共同特點就是屬於貓,那麼貓就是乙個類,同樣狗也是乙個類。在貓狗的基礎上,因為它們均屬於動物,那麼動物便是它們...

C 抽象類和介面

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