作者AJE (小傑)
看板C_Sharp
標題[問題] 繼承與虛擬方法的問題
時間Wed Nov 24 10:21:49 2010
想請問有關繼承與覆寫虛擬函數的問題
以下是我寫的測試程式:
//Class宣告--------------------------------------
public class Father
{
public int CalcVal()
{
return Data();
}
virtual public int Data()
{
return 10;
}
}
public class Child : Father
{
override public int Data()
{
return 200;
}
}
//Class宣告--------------------------------------
//主程式
Child Val = new Child();
MessageBox.Show(Convert.ToString(Val.CalcVal()));
因為CalcVal是父類別的函式,而父類別也有自己的Data()函式,
所以我本來以為輸出的值是10,但是實際輸出的結果是200,
我想請問:
1.是不是只要被覆寫之後,父類別中呼叫被覆寫的函式時,實際上會
呼叫到子類別中的函式?
2.如果是的話,那麼在父類別中的任何函式,實作上是否最好不要呼叫
任何一個"虛擬"函式,以免未預期的行為發生?
3.在這個例子中,如果我希望輸出10,且又希望兩個類別保有Data()函式的話,
是不是最好用獨立的兩個類別來處理,不要用"繼承"的方式?
先謝謝版友了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.128.231.175
→ ken1325:Child 覆寫了 Data 函式,而你用Child建立物件,顯示出來 11/24 11:42
→ ken1325:當然就是200。 11/24 11:43
→ AJE:了解^^ 11/24 18:01