02 24 方法重寫與虛方法呼叫

2022-05-14 03:46:00 字數 991 閱讀 7662

前一篇隱藏的例項中,由於子類隱藏了父類的同名方法,如果不進行強制轉換,就無法通過父類變數直接呼叫子類的同名方法,哪怕父類變數引用的是子類變數。

我們希望的是每個物件「各司其職」。

為了達到這個目的,可以在父類同名方法前加關鍵字virtual,表明這是乙個虛方法,子類可以重寫此方法:即在子類同名方法前加關鍵字override,表明這是對父類同名方法進行了重寫。

請看如下**:

1

class parent //父類2

7}8class child : parent //

子類繼承父類

914 }

請看一下使用**(在主函式中呼叫):

1             child c = new

child();

2parent p;

3 p =c;

4 p.overridef();//

呼叫父類的還是子類的同名方法?

上述**執行的結果:

這一事例表明,將父類方法定義為虛方法,子類重寫同名方法之後,通過父類變數呼叫此方法,到底是呼叫父類還是子類的,由父類變數引用的真實物件型別決定,而與父類變數無關。

換句話說,同樣一句**:

p.overridef();
在p引用不同物件時,其執行的結果完全不一樣!因此,如果我們再程式設計時只針對父類變數提供的對外介面程式設計,就是我們的**成了「變色龍」,傳給它不同的子類物件(這些子類物件都重寫了父類的同名方法),它就會做不同的事。這就是物件導向語言中的「虛方法呼叫」特性。這一特性會讓我們寫出非常靈活的**,大大減少由於系統功能擴充和改變帶來的大量**修改工作量。

結論:物件導向怨言擁有的「虛方法呼叫」特性,使我們可以只用同樣的乙個語句,在執行時根據物件型別而執行不同的操作。

虛方法與重寫方法

在c 中,繼承,虛方法,與重寫方法結合在一起才能實現多型性 虛方法是指允許其子類重新定義的方法的方法,在宣告時,需要使用virtual修飾符,不能是私有的 public virtual int add int a,int b return a b 重寫方法也稱覆蓋,是在派生類使用override修飾...

05 方法重寫

在繼承關係中,子類如果定義了乙個與父類方法簽名完全相同的方法,被稱為覆寫 override 加上 override可以讓編譯器幫助檢查是否進行了正確的覆寫。例如,在person類中,我們定義了run 方法 class person 在子類student中,覆寫這個run 方法 class stude...

20207 23方法重寫與抽象多型

一 方法的重寫或方法的覆蓋 1.子類根據需求對父類繼承的方法進行重新編寫 2.重寫時,可以用super.方法的方式來保留父類的方法 注意 構造方法無法被重寫!3.方法重寫規則 在繼承的情況下,子類的方法滿足以下條件 1.方法名相同,引數列表相同 2.返回值型別相同或者是其父類返回值的子類 3.父類的...