回覆列表
-
1 # 使用者96343397862
-
2 # 使用者2458114238191884
先說說區別:
1、虛方法必須有實現部分,抽象方法不可以有實現部分;
2、虛方法可以在派生類中重寫也可以不重寫,抽象方法必須在派生類中重寫
3、虛方法可以在任何非密封類中宣告,抽象方法只能在抽象類中宣告。
4、如果類包含抽象方法,那麼該類也必須為抽象的,不能例項化。
相比而言,虛方法傾向於程式碼複用,抽象方法更類似一種規約來約束子類必須實現某方法。
舉個例子(未必恰當、只為說明問題):
比如有個基類“動物”;兩個子類“獅子”、“青蛙”。
獅子捕獵:鎖定目標、用牙齒和利爪抓獲;
獅子說話:噢嗚;
青蛙捕獵:鎖定目標、用舌頭抓獲;
青蛙說話:呱呱;
對於捕獵,他們有共性也有區別:
所以就可以把捕獵宣告為虛方法,基類裡實現共性部分、各子類實現個性部分;
對於說話,完全不同,但是又必須讓他們說話——否則成植物了,呵呵:
所以就可以把說話宣告為抽象方法,基類只宣告此方法來作為約束,強制子類實現。
抽象方法:對應關鍵字 abstract 抽象方法只能在抽象類中宣告,不能有方法體,必須在派生類中實現方法體 虛方法:對應關鍵字 virtual 在c#中,虛方法是為派生類重寫父類的方法做準備的,只有宣告為虛方法,在派生類中才可以使用override方法對其進行重寫,另外,虛方法可以具有方法體