14.1.2 覆蓋
我們上面提到,類的成員聲明中,可以聲明與繼承而來的成員同名的成員。這時我們稱派生類的成員覆蓋(hide)了基類的成員。這種情況下,編譯器不會報告錯誤,但會給出一個警告。對派生類的成員使用new關鍵字,可以關閉這個警告。
前面汽車類的例子中,類car繼承了Vehicle的Speak()方法。我們可以給Car類也聲明一個Speak()方法,覆蓋Vehicle中的Speak,見下面的代碼。
程序清單14-2:
using System; class Vehicle //定義汽車類 { public int wheels; //公有成員:輪子個數 protected float weight; //保護成員:重量 public Vehicle(){;}; public Vehicle(int w,float g){ wheels=w; weight=g; } public void Speak(){ Console.WriteLine("the w vehicle is speaking!"); } } class Car:Vehicle //定義轎車類 { int passengers; //私有成員:乘客數 public Car(int w,float g,int p) wheels=w; weight=g; passengers=p; } new public void Speak(){ Console.WriteLine("Di-di!"); } }
注意:如果在成員聲明中加上了new關鍵字修飾符,而該成員事實上並沒有覆蓋繼承的成員,編譯器將會給出警告。在一個成員聲明同時使用new和override,則編譯器會報告錯誤。