另一個多型性的例子

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

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

派生類 DucatiLamborghini 繼承自 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() 方法,該方法顯示輸出,如圖所示。這裡有多型行為,即使物件 vehicleVehicle 型別,它也會呼叫派生類方法 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