繼承自基類的子類可轉換為基類型。「能用基類的地方,就能用子類。」執行時透過基類參考呼叫子類實作,同一操作呈現不同行為。
virtual)override)
public class DrawingObject
{
public virtual void Draw()
{
Console.WriteLine("I'm just a generic drawing object.");
}
}
virtual 允許子類覆寫。基類提供預設實作。
public class Line : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Line.");
}
}
public class Circle : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Circle.");
}
}
public class Square : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Square.");
}
}
override 執行時取代基類實作。條件:透過基類型別參考子類實例。
DrawingObject[] objects = new DrawingObject[3];
objects[0] = new Line();
objects[1] = new Circle();
objects[2] = new Square();
foreach (DrawingObject obj in objects)
obj.Draw(); // 執行時依實際型別呼叫對應 Draw()
輸出:
I'm a Line. I'm a Circle. I'm a Square.
virtualoverride