多型(Polymorphism)

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