摘要:多型(Polymorphism)
學習物件導向,其中的多型必定是重點,而繼承跟多型有必然的關係,沒繼承就沒有多型,簡單來說,多型可以讓處理同一類資料的類別擁有相同的函數,但是每個類別所實做出來的相同函數的功能不一定相同,講起來很抽象,簡單寫個範例來說明:
寫一個基底類別(CarClass)
class CarClass
{
public virtual string Run()
{
return "Car is Running";
}
public string GetName()
{
return "Car";
}
}另外寫有個衍生類別繼承了CarClass
BenzClass:
class BenzClass : CarClass
{
public override string Run()
{
return "Benz is Running";
}
public new string GetName()
{
return "Benz";
}
}ToyotaClass:
class ToyotaClass : CarClass
{
public override string Run()
{
return "Toyota is Running";
}
}用戶端程式碼部份:
class Program
{
static void Main(string[] args)
{
BenzClass Benz = new BenzClass();
ToyotaClass Toyota = new ToyotaClass();
System.Console.WriteLine(Benz.Run());
System.Console.WriteLine(Toyota.Run());
System.Console.ReadLine();
}
}以上面的例子來說,不同的物件(Benz和Toyota)呼叫了同一個方法(Run),但執行出來的結果是不一樣,因為上面的Run()由各自的子類別所重寫(Override),但基底類別的Run()要加上virtual關鍵字設為虛擬,才能讓子類別給完全取代。
用戶端程式碼部份:
class Program
{
static void Main(string[] args)
{
BenzClass Benz = new BenzClass();
CarClass Base = (CarClass)Benz;
System.Console.WriteLine(Benz.GetName());
System.Console.WriteLine(Base.GetName());
System.Console.ReadLine();
}
}如果使用New關鍵字的話,以上面的例子來說,如GetName()所示,一樣會呼叫衍生類別的Method,但還是可以呼叫基底類別的Method,只要轉換一下就可以了。