C 學習筆記(7) 多型

2021-10-02 17:09:56 字數 1727 閱讀 7404

物件導向開發有三大特性(特點/特徵):封裝,繼承,多型。

在繼承關係的前提下,例項化出不同的物件,這些物件呼叫相同的方法,但是卻表現出不同的行為,這就叫做多型。

在c#語言中體現多型有三種方式:虛方法,抽象類,介面。

// 父類: 

public

virtual 返回值型別 方法名(

)// 子類:

public

override 返回值型別 方法名(

)

class

cat:

cattype

}

cat c =

newcat()

;c.method_in_father()

;//呼叫成功,對應第二條第一句

cattype ct =

newcat()

;//賦值成功,對應第一條

ct.cry()

;//呼叫的是重寫後的

c.method_in_father()

;//呼叫成功,對應第二條第二句

c.method_in_son()

;//呼叫失敗,同上,即使他是乙個子類物件賦值過去的

cat c2 =

(cat)ct;

//轉換成功,對應第三句

isas兩個關鍵字都可以進行型別轉換。

is:如果轉換成功,返回true,失敗返回false;

as:如果轉換成功,返回對應的物件,失敗返回null。

bool bl = ct is tiger;

//輸出false

bool bl = ct is cat;

//輸出true

if(ct as cat ==

null

)else

//輸出轉換成功

抽象方法的返回值型別前用關鍵字abstract修飾,且無方法體。

abstract

class

npc

抽象方法必須存在於抽象類中。

//父類

abstract

class

npc//子類

class

shopnpc

:npc

子類繼承抽象類,使用override關鍵字重寫父類中所有的抽象方法。

<1>當父類中的方法不知道如何去實現的時候,可以考慮將父類寫成抽象類,將方法寫成抽象方法。

<2>如果父類中的方法有預設實現,並且父類需要被例項化,這時可以考慮將父類定義成乙個普通類,用虛方法實現多型。

<3>如果父類中的方法沒有預設實現,父類也不需要被例項化,則可以將該類定義為抽象類。

inte***ce

ifly

//自動屬性

}

介面注意事項

使用場景對比

學習c (7)多型

一 如果子類定義了父類中原型相同的函式會發生什麼?1 函式重寫 在子類中定義與父類中原型相同的函式 函式重寫只發生在父類與子類之間 2 過載與重寫區別 1 過載 同乙個作用域 子類無法過載父類函式,父類同名函式將被覆蓋 過載是在編譯期間根據引數型別和個數決定 2 重寫 發生於父類 子類之間 父類和子...

C 學習筆記 多型

引言 1.虛繼承 如果乙個派生類從多個基類派生,而這些基類又有乙個共同的基類,則在對該基類中宣告的名字進行訪問時,可能產生二義性。解決方案 虛繼承宣告,加乙個virtual 關鍵字 2.物件導向新需求 編譯器的做法不是我們期望的 如果用父類指標指向子類物件,再呼叫print 方法,均會呼叫父類中的p...

C 多型學習筆記

看了一堆介紹多型的東西,腦子裡就記得幾個概念了。靜態多型,又叫早繫結,動態多型,應該是叫晚繫結。多型的價值在於使程式更簡潔 更高效。no virtual no 多型,virtual means 已多型。不要覺得問題 很沒用 你還就是說不出來。同樣的命令,不同的物件,做出不同的動作。這就得借助the ...