問題:在父類中單獨的一個方法,調用父類的一個虛方法(該方法是被子類重寫的),那么執行的這個虛方法是掉父類的方法呢還是子類的方法呢?
class Father { public string name = "我是父親"; public virtual string GetName() { return this.name; } public void SetFather() { var _name = this.GetName();//如果實例對象是子類的話,這里調的是子類的重寫方法;如果實例對象是父類的話,調的當然是父類的方法 Console.WriteLine("通過GetName方法獲取的值:" + _name); Console.WriteLine("Father的name是:" + name); } } class Son : Father { public string son_name = "我是兒子"; public override string GetName() { this.son_name = "兒子變成豬"; this.name = "父親的名字改變了哦"; return this.son_name; } }
調用:
/* * 這里主要是測試 在父類中單獨的一個方法,調用父類的一個虛方法(該方法是被子類重寫的),那么執行的這個虛方法是掉 * 父類的還是子類的呢? * 實驗證明:調的是子類的被重寫的方法。 */ Console.WriteLine("實例化son對象"); Father f = new Son(); f.SetFather(); Console.WriteLine("========================我是華麗的分割線========================"); Console.WriteLine("實例化father對象"); Father f2 = new Father(); f2.SetFather(); Console.Read();
答案是:如果實例對象是子類的話,這里調的是子類的重寫方法;如果實例對象是父類的話,調的當然是父類的方法