看板 C_Sharp 關於我們 聯絡資訊
想請問有關繼承與覆寫虛擬函數的問題 以下是我寫的測試程式: //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