多型實現之 虛方法

2022-07-23 02:42:13 字數 2281 閱讀 6358

多型實現共有三種途徑,分別是:虛方法、抽象類、介面,本篇講述第一種方法:虛方法。

1. 什麼是虛方法?虛方法,從語法上來說是被virtual關鍵字修飾的方法,從含義上講,這個方法在類被繼承後可以在子類重寫(override)。

2. 在子類中重寫虛方法需要注意哪些問題?首先說明的是,子類中的重寫並不是必須的,因為父類中的虛方法本身也是有函式體的(除非是抽象方法),所以如果進行重寫則會覆蓋從父類中的虛方法,否則直接呼叫父類的該方法。

3. 是怎樣

體現多型的?在呼叫的時候子類只需要呼叫同乙個方法,如果進行重寫則會表現出不同的效果,這就體現出了「多型」,即是同一種寫法不同的表現形態,「於同中求不同」。

4.**示例:

1

using

system;

2using

system.collections.generic;

3using

system.linq;

4using

system.text;56

namespace

_02用虛方法實現多型714

public

string

name

1519

//虛方法,可在子類中重寫

20public

virtual

void

show()

2124}25

///26

///中國人類

27///

28public

class

chinese : person

2935

//重寫show()方法

36//

可用sealed關鍵字修飾show(),檢視beijingren類中不可再重寫show()方法

37public

override

void

show()

38,我是中國人

", name);40}

41public

void

sayhello()

4245}46

///47

///日本人類

48///

49public

class

janpanese : person

5056

public

override

void

show()

57,我是日本人。

", name);59}

60}61///

62///

美國人類

63///

64public

class

american : person

6571

//不進行重寫的話,在使用american物件呼叫show()方法時會直接呼叫父類person中的方法。

72//

public override void show()

73//

,我是美國人。", name);

75//}76

}77public

class

beijingren : chinese

7883

public

override

void

show()

8487

}88 }

類定義

1

using

system;

2using

system.collections.generic;

3using

system.linq;

4using

system.text;56

namespace

_02用虛方法實現多型

7;//

建立父型別的陣列

17//

遍歷整個陣列,並使用is判斷是否屬於某種型別

18for (int i = 0; i < pn.length; i++)

1923

24//

事實證明,多型只適用於子類共有的某些屬性或方法,不適用於個性東西。

25//

person p1 = new chinese("sk");

26//

p1.sayhello();

27 console.writeline("ok"

);28

console.readkey();

2930}31

}32 }

主函式

C 多型實現之虛方法

控制台應用程式中,新建乙個people類檔案,如下 using system using system.collections.generic using system.linq using system.text namespace 13多型 public string name 1.第一,將父類...

虛方法實現多型

大家都知道物件導向的三大特徵,封裝 繼承 多型,這裡解釋一下多型 同一操作作用於不同的物件,可以有不同的解釋,產生不同的執行結果,這就是多型性。換句話說,實際上就是同乙個型別的例項呼叫 相同 的方法,產生的結果是不同的。這裡的 相同 打上雙引號是因為這裡的相同的方法僅僅是看上去相同的方法,實際上它們...

多型之虛方法

1.虛方法用到兩個關鍵字 virtual 和 override 當子類繼承與父類物件時,宣告乙個父類物件,通過在子類中重寫父類物件的方法,可以直接調到子類的方法 public class person set public person string name public virtual void...