另一個多型性的例子
多型性是 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