[問題] 繼承與虛擬方法的問題

看板C_Sharp作者 (小傑)時間15年前 (2010/11/24 10:21), 編輯推噓0(003)
留言3則, 2人參與, 最新討論串1/3 (看更多)
想請問有關繼承與覆寫虛擬函數的問題 以下是我寫的測試程式: //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

11/24 11:42, , 1F
Child 覆寫了 Data 函式,而你用Child建立物件,顯示出來
11/24 11:42, 1F

11/24 11:43, , 2F
當然就是200。
11/24 11:43, 2F

11/24 18:01, , 3F
了解^^
11/24 18:01, 3F
文章代碼(AID): #1Cx7Q_jZ (C_Sharp)
文章代碼(AID): #1Cx7Q_jZ (C_Sharp)