usingsystem;
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 這是顯示結果...