C Virtual和Override的幾種組合

2022-04-08 08:29:55 字數 921 閱讀 2066

情況1:

class a{public void show()}

class b:a{public void show()}

編譯通過,有警告讓在b的方法裡新增new關鍵字,以便將a的方法隱藏

編譯時繫結(根據宣告型別呼叫方法)

情況2:

class a{public virtual void show()}

class b:a{public void show()}

編譯通過,有警告讓在b的方法裡新增new或者override關鍵字,預設將a的方法隱藏

編譯時繫結(根據宣告型別呼叫方法)

情況3:

class a{public virtual void show()}

class b:a{public override void show()}

編譯通過

執行時繫結(根據實際型別呼叫方法)

情況4:

class a{public void show()}

class b:a{public override void show()}

編譯錯誤,被override的方法必須是abstract、virtual或者override的

結論1:若想使用動態繫結(執行時繫結)

class a{public virtual void show()}

class b:a{public override void show()}

結論2:若想使用靜態繫結(編譯時繫結)

class a{public void show()}

class b:a{public new void show()}

看來不能死讀書,還是實際操作一下比較容易搞清楚:)

java中overload和override區別

1 綜述 overload它是指我們可以定義一些名稱相同的方法,通過定義不同的輸入引數來區分這些方法,呼叫時vm就會根據不同的引數樣式,來選擇合適的方法執行,是乙個類中多型性的一種表現。override表示子類中的方法可以與父類中的某個方法的名稱和引數完全相同,通過子類建立的例項物件呼叫這個方法時,...

C virtual和abstract的區別

virtual和abstract都是用來修飾父類的,通過覆蓋父類的定義,讓子類重新定義。它們有乙個共同點 如果用來修飾方法,前面必須新增public,要不然就會出現編譯錯誤 虛擬方法或抽象方法是不能私有的。畢竟加上virtual或abstract就是讓子類重新定義的,而private成員是不能被子類...

C virtual和abstract的區別

虛方法和抽象方法都可以供派生類重寫,它們之間有什麼區別呢?1.虛方法必須有實現部分,抽象方法沒有提供實現部分,抽象方法是一種強制派生類覆蓋的方法,否則派生類將不能被例項化。如 抽象方法 public abstract class animal public abstract void sleep p...