情況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...