重寫與隱藏

2022-07-05 09:13:42 字數 890 閱讀 7844

靜態方法、成員變數不能重寫,只可以隱藏;例項方法可以重寫

重寫與隱藏的本質區別:重寫是動態繫結,根據執行時引用所指向物件的實際型別來決定呼叫相關類的成員。而隱藏是靜態繫結的,根據編譯時引用的靜態型別來決定呼叫相關類的成員。換句話說,如果子類重寫了父類的方法,當父類的引用指向子類物件時,通過父類的引用呼叫的是子類的方法。如果子類隱藏了父類的方法(成員變數),通過父類的引用呼叫的仍然是父類的方法(成員變數),如下:

class

superxieyuyan

public

static

void

mstatic()

}public

class xieyuyan extends

superxieyuyan

public

static

void

mstatic()

public

static

void

main(string args)

}

輸出為:

父類的表現:

superxieyuyan

minstance() in superxieyuyan

mstatic() in superxieyuyan

子類的表現:

xieyuyan

minstance() in xieyuyan

mstatic() in xieyuyan

父類引用指定子類例項後的表現:

superxieyuyan

minstance() in xieyuyan

mstatic() in superxieyuyan

在將子類例項賦給父類例項後,父類例項呼叫的還是原來的成員變數和靜態方法

方法重寫與方法隱藏

1 方法重寫 就是在基類中的方法用virtual關鍵字來標識,然後在繼承類中對該類進行重寫 override 這樣基類中的方法已經被重寫了,已經失去了功能了。當讓基類的物件的引用直接指向繼承類的物件時 多型性 呼叫該方法則是呼叫的繼承類的方法。2 方法隱藏 無論基類中的方法是否用了virtual關鍵...

C 中過載與重寫與隱藏

include using namespace std class base void g float x virtual void h int x class derived public base void g int x void h float x 其中,class b void f dou...

過載 重寫 隱藏

共同點 函式名相同 定義 1 如果在類裡函式名相同但是形參不同,則為過載。形參不同包括形參的型別個數以及順序。2 類間。重寫和隱藏都發生在基類和派生類之間。重寫 覆蓋 發生在派生類和基類之間。必須滿足兩個條件 1 基類有virtual宣告 2 函式名和形參必須完全相同。隱藏 發生在派生類和基類之間,...