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,則編譯器會報告錯誤。