C 繼承中方法的呼叫

2022-02-15 07:53:58 字數 1508 閱讀 9877

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

namespace

mytest

public

void

test()

public

static

int i = 123

;

public

virtual

void

showinfo()

public

virtual

void

shownum()

}class

intnumber : number

public

void

test()

newpublic

static

int i = 456

;

public

newvirtual

void

showinfo()

public

override

void

shownum()

",number.i.tostring());

console.writeline(

"new num is

",i.tostring());}}

class

program

}

1.父類引用指向父類物件:呼叫的時候只能呼叫父類的方法,方法表中根本沒有子類。

2.子類引用指向子類物件:呼叫的時候既能呼叫子類的方法,也能呼叫從父類繼承的方法(包括虛方法和例項方法《存疑:既然子類的方法表中沒有父類的例項方法,它是如何由子類引用調到的呢?>),特別注意,在呼叫子類的建構函式的時候,會首先呼叫父類的構造方法!ps.方法表:包括非虛方法表和虛方法表,按照繼承的虛方法、新引入的虛方法、例項方法和靜態方法排列。

3.父類引用指向子類物件:

第一點:在呼叫建構函式的時候仍然是按照先父類建構函式,再子類建構函式的方法進行呼叫。

第二點:父類引用是無法呼叫父類中沒有,而子類特有的方法的。

第三點:對於父類和子類都有的同名方法(除去構造方法)又分以下幾種情況:

1.對於例項方法,只執行父類的方法,子類的沒有被執行。

2.對於虛方法,如果子類有覆寫override,則只執行子類的方法,將父類的虛方法遮蔽掉。

3.對於虛方法,如果子類有乙個new關鍵字,也就是說父類和子類是兩個不同的虛方法,則只執行父類的虛方法。《其實沒有new的話不也是只執行父類的方法虛方法麼?這有什麼用?new用作隱藏父類的同名成員,語義上和override互斥》

4.關於繼承的層次問題。

孫子類重寫override方法,如果父類和爺爺類都有虛方法,則只重寫父類的虛方法。如果爺爺類特有的虛方法,則重寫爺爺類的虛方法,一直能遞迴到object的虛方法

C 中方法的呼叫

c 中方法的呼叫 1.同乙個類中方法的呼叫 靜態方法可以直接呼叫靜態方法 靜態方法不能直接呼叫非靜態方法,靜態方法先生成。非靜態方法可以直接呼叫靜態方法 如果靜態方法要呼叫非靜態的方法,必須使用例項成員 2.不同類中方法的呼叫 靜態方法,使用類名.靜態方法名稱 非靜態方法使用,類的例項物件.方法名稱...

java繼承中方法呼叫的動態繫結

乙個父類物件通過向上轉型獲得子類物件的引用,子類中定義了和父類一樣的方法,當父類物件呼叫自身的方法時,會轉向呼叫子類相應的方法。例如 package mian4 class shape public void erase class circle extends shape public void ...

關於C 程式設計中方法的呼叫

c 在vs程式設計中,方法的定義以及呼叫 諾在同一命名空間,同一類下的方法呼叫 如果方法宣告中有static,可以直接使用該類名進行呼叫。由於是在同一類下的方法,所以在呼叫方法時可以不用加類名稱。例如程式 namespace sta public static void xianshi 這是顯示結果...