C 學習入門(三) 抽象類

2021-10-10 08:44:37 字數 2885 閱讀 4629

2. 實現的案例

3. 異常處理

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

在c#中,抽象類可以包含:抽象方法、抽象屬性、具體方法和具體屬性。

訪問修飾符 abstract

class 類名

抽象類的定義類似於普通類,只不過在訪問修飾符後加入abstract

// 抽象方法

public

abstract

double

getname()

;// 抽象屬性

public

abstract

string name

抽象類中需要加入抽象方法,而抽象方法只需要宣告,也就是抽象方法的內容是不用寫的,只需要乙個空方法。有點類似於c++在標頭檔案中定義方法時,可以只是乙個宣告,不提供方法體,而在.c檔案中才實現該函式。

訪問修飾符 class 派生類的類名 : 基類的類名

其他類成員;

}

在子類繼承自基類後,需要重寫抽象方法,否則編譯器會報錯。只需要在方法的訪問修飾符後加入override即可。

(1)抽象類不能例項化,具體類能例項化

(2)抽象類中不一定要有抽象方法,具體類中不能有抽象方法。

(3)抽象類可以和具體類一樣,有具體方法。

(4)抽象類可以繼承抽象類,子類如果不是抽象類,則必須重寫抽象類中的全部抽象方法。

(5)在抽象類中,不能用private修飾抽象方法,因為抽象方法要被子類重寫。

(6)在以下情況,乙個類將成為抽象類:

<1>當乙個類的乙個或多個方法是抽象方法。

<2>當類是乙個抽象類的子類,但是不能為任何抽象方法提供任何實現細節或方法實體。

<3>當乙個類實現乙個介面,但是不能為任何抽象方法提供任何實現細節或方法實體。

根據抽象類,可以總結多型為一下幾點:

(1)使用基類型別的引用指向子類的物件,但是該引用只能呼叫父類定義的方法和變數。

(2)如果派生類重寫了基類的方法,那麼派生類呼叫該方法時會呼叫派生類自己的方法(動態鏈結、動態呼叫)。

(3)乙個型別引用只能引用型別自身含有的方法和變數。

// pet抽象類

public

abstract

class

pet//基類,抽象類,定義寵物類

//寵物名字

public

string gender

//寵物性別

public

int health

//寵物健康值

public

abstract

void

tohospital()

;//看病方法

public

abstract

void

eat();

}// dog具體類

class

dog:

pet//派生類,定義小狗類

public

override

void

eat(

)//重寫看病方法

}// cat具體類

public

class

cat:

pet//派生類,定義貓咪類

public

override

void

eat(

)//重寫看病方法

}// doctor

class

doctor

//定義醫生類}}

// 主函式

class

program

else

}}

pet = new dog();使用基類物件指向派生類物件,派生類物件轉換為基類物件,是安全的轉換,也就是向上轉換型別,一般是隱式轉換

對於基類中定義的方法,如果派生類中重寫了該方法,那麼基類型別的引用將會呼叫派生類中的這個方法,這就是多型。

使用基類物件指向派生類物件,那麼該基類物件可以指向任意乙個派生類物件,可以隨意切換,非常方便。

派生類物件 = (派生類名)基類物件;

但是,當將基類物件轉換為派生類物件,向下轉換時,是很不安全的。為此預設情況下,進行向下轉型時,往往會發生編譯錯誤。然而,有時候確實需要強制轉換,這時候就需要異常處理。

try

catch

cat和dog都是pet的派生類,當然不能互相轉換,型別轉換出錯。

//使用 as

dog dog = pet as

dogif

(dog==

null

) console.

writeline

(「轉換不成功!」)

;

//使用 is

pet =

newcat()

;if(pet is dog)

else

使用is和as,再進行強制轉換,這樣能夠更加安全地進行轉換,轉換錯誤後程式能繼續執行下去,不用丟擲異常。

C 程式設計入門 抽象類

題目 程式設計定義抽象類shape,由它派生出5個派生類circle 圓形 square 正方形 rectangle 矩形 trapezoid 梯形 三角形 用虛函式分別計算幾種圖形的面積,並求他們的和。要求 用基類指標陣列,使它每乙個元素指向乙個派生類物件。首先,我們來通俗了解一下什麼是抽象類,包...

C 學習 多型 抽象類

多型 概念 run time binding 函式名和函式入口點的繫結發生在程式執行時刻 complie time binding 程式再編譯時進行函式名和函式入口的繫結 多型的本質 run time binding 多型的條件 1.必須有繼承 2.子類要把虛函式重寫 override 派生類的vi...

c 介面,抽象類學習

說明 介面可以包含方法 屬性 索引器 和事件作為成員,但是並不能設定這些成員的具體值。也就是說,只能定義,不能那個給他裡面定義的東西賦值。介面具有以下特性。c 中宣告介面時,使用inte ce關鍵字 修飾符 inte ce 介面名稱 繼承的介面列表 介面內容 說明 1.宣告介面時,除inte ce關...