摘要:多型(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,只要轉換一下就可以了。