靜態方法、成員變數不能重寫,只可以隱藏;例項方法可以重寫
重寫與隱藏的本質區別:重寫是動態繫結,根據執行時引用所指向物件的實際型別來決定呼叫相關類的成員。而隱藏是靜態繫結的,根據編譯時引用的靜態型別來決定呼叫相關類的成員。換句話說,如果子類重寫了父類的方法,當父類的引用指向子類物件時,通過父類的引用呼叫的是子類的方法。如果子類隱藏了父類的方法(成員變數),通過父類的引用呼叫的仍然是父類的方法(成員變數),如下:
classsuperxieyuyan
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 函式名和形參必須完全相同。隱藏 發生在派生類和基類之間,...