另一個多型性的例子

多型性是 OOP 的支柱之一。Poly 來自希臘語,意思是多種形式。

下面是展示多型性的例子。類 Vehicle 將多種形式作為基類。

派生類 Ducati 和 Lamborghini 繼承自 Vehicle 並覆蓋基類的 Display() 方法,以顯示自己的 NumberOfWheels。

public class Vehicle
{
    protected int NumberOfWheels { get; set; } = 0;
    public Vehicle()
    {
    }

    public virtual void Display()
    {
        Console.WriteLine($"The number of wheels for the {nameof(Vehicle)} is {NumberOfWheels}");
    }
}

public class Ducati : Vehicle
{
    public Ducati()
    {
        NoOfWheels = 2;
    }

    public override void Display()
    {
        Console.WriteLine($"The number of wheels for the {nameof(Ducati)} is {NumberOfWheels}");
    }
}

public class Lamborghini : Vehicle
{
    public Lamborghini()
    {
        NoOfWheels = 4;
    }

    public override void Display()
    {
        Console.WriteLine($"The number of wheels for the {nameof(Lamborghini)} is {NumberOfWheels}");
    }
}

下面是展示多型性的程式碼片段。使用第 1 行的變數 vehicle 為基本型別 Vehicle 建立物件。它在第 2 行呼叫基類方法 Display() 並顯示輸出,如圖所示。

 static void Main(string[] args)
 {
    Vehicle vehicle = new Vehicle();    //Line 1
    vehicle.Display();                  //Line 2  
    vehicle = new Ducati();             //Line 3
    vehicle.Display();                  //Line 4
    vehicle = new Lamborghini();        //Line 5
    vehicle.Display();                  //Line 6
 }

在第 3 行,vehicle 物件指向派生類 Ducati 並呼叫其 Display() 方法,該方法顯示輸出,如圖所示。這裡有多型行為,即使物件 vehicle 是 Vehicle 型別,它也會呼叫派生類方法 Display() 作為型別 Ducati 覆蓋基類 Display() 方法,因為 vehicle 物件指向 Ducati。

當它呼叫 Lamborghini 型別的 Display() 方法時,同樣的解釋是適用的。

輸出如下所示

The number of wheels for the Vehicle is 0        // Line 2 
The number of wheels for the Ducati is 2         // Line 4
The number of wheels for the Lamborghini is 4    // Line 6