C 抽象類的基礎原理

2021-08-04 06:59:08 字數 1770 閱讀 9763

物件導向

的概念中,所有的物件都是通過類來描繪的,但是反過來,並不是所有的類都是用來描繪物件的,如果乙個類中沒有包含足夠的資訊來描繪乙個具體的物件,這樣的類就是抽象類。

抽象類往往用來表徵對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。

抽象類不能直接例項化,並且對抽象類使用 new 運算子會導致

編譯時錯誤。雖然一些變數和值在編譯時的

型別可以是抽象的,但是這樣的變數和值必須或者為 null,或者含有對非抽象類的例項的

引用(此非抽象類是從抽象類派生的)。

允許(但不要求)抽象類包含抽象成員。

抽象類不能被密封。

抽象類表示該類中可能已經有一些方法的具體定義,但是介面就僅僅只能定義各個方法的介面(方法名,引數列表,返回型別),並不關心具體細節。

介面是引用型別的,和抽象類的相似之處有三點:

抽象類裡面可以有非抽象方法,但介面裡只能有抽象方法, 宣告方法的存在而不去實現它的類被叫做抽像類(abstract class),它用於要建立乙個體現某些基本行為的類,並為該類宣告方法,但不能在該類中實現該類的情況。不能建立abstract 類的例項。然而可以建立乙個變數,其型別是乙個抽像類,並讓它指向具體子類的乙個例項。不能有抽像建構函式或抽像靜態方法。abstract 類的子類為它們父類中的所有抽像方法提供實現,否則它們也是抽像類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。介面(inte***ce)是抽像類的變體。在介面中,所有方法都是抽像的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽像的,沒有乙個有程式體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程式體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何對像上呼叫介面的方法。由於有抽像類,它允許使用介面名作為引用變數的型別。通常的動態聯編將生效。引用可以轉換到介面型別或從介面型別轉換,instanceof 運算子可以用來決定某物件的類是否實現了介面。

多型:乙個介面多個功能。

靜態多型性:編譯時發生函式響應(呼叫);

動態多型性:執行時發生函式響應。

靜態繫結(早期繫結):編譯時函式和物件的連線機制。

兩種技術實現靜態多型性:函式過載/運算子過載。

函式過載:在同一範圍內對相同函式名有多個定義,可以是引數型別或引數個數的不同,但不許只有返回值型別不同。

運算子過載:

關鍵字 abstract

宣告抽象類:用於介面部分類的實現(派生類繼承抽象類時,實現完成)。抽象類包含抽象方法,抽象方法可被派生類實現。

抽象類規則:

不能建立抽象類的例項

不能在抽象類外定義抽象方法

不能把抽象類宣告為sealed(類前帶關鍵字sealed代表該類是密封類,不能被繼承)

關鍵字virtual

宣告虛方法:用於方法在繼承類中的實現(在不同的繼承類中有不同的實現)。

抽象類和虛方法共同實現動態多型性。

注:繼承類中的重寫虛函式需要宣告關鍵字 override,在方法引數傳入中寫(類名 形參名)例如 public void callarea(shape sh),意思是傳入乙個 shape 型別的類。

virtual和abstract都是用來修飾父類的,通過覆蓋父類的定義,讓子類重新定義。

過載(overload

)是提供了一種機制, 相同函式名通過不同的返回值型別以及引數來表來區分的機制。

重寫(override

)是用於重寫基類的虛方法,這樣在派生類中提供乙個新的方法。

C 基礎 抽象類

下面,我們舉乙個完整的例子 例11 22 include class cpolygon virtual int area void 0 class crectangle public cpolygon class c public cpolygon int main 本程式計算本輸出矩形和三角形的面...

C 基礎 042 抽象類 抽象方法

虛擬成員或者抽象成員不能是私有的 抽象方法是用abstract修飾的方法 抽象方法是不能含有方法體的 抽象方法可以是public 和protected 抽象類中可以寫抽象方法 抽象方法必須在抽象類中 抽象類中可以寫例項方法 抽象類是乙個不完全抽象的類 抽象類是無法進行例項化的 這是乙個父類,由abs...

Java基礎 抽象類

抽象類 目前存在的問題 1.動物類的run方法描述的不正確。2.沒有強制要子類一定要重寫run方法 抽象類的應用場景 我們在描述一類事物的時候,發現這種事物確實存在某種行為,但是這種行為目前是不具體的,那麼我們可以抽取這種行為的宣告,但是不去實現這種行為,這種時候這種行為我們稱作為抽象行為,我們就需...