c#多型性

wisdomone1發表於2012-03-08
class Program
    {
        static void Main(string[] args)
        {
            Car c1 = new Car();
            c1.F();//透過new隱藏了父類的同名方法
            Console.ReadKey();
            c1.G();//重寫了父類的G方法
            Console.ReadKey();
            Vehicle v1 = c1;
            v1.F();//最終到底是呼叫CAR類還是呼叫父類VECHICLE類的F方法呢 //這個會呼叫父類的F方法,而不是子類的NEW同名方法
            Console.ReadKey();
            v1.G();//同上 //最終呼叫還是C1的重寫方法G,這就是執行時狀態決定,
            Console.ReadKey();
        }
    }


 public class Vehicle
    {
        //編譯時多型性;是透過過載實現的,即方法過載和運算子過載

        //執行時多型性,是直到系統執行時,才根據實際情況決定實現何種操作.這種多型性是透過虛成員實現
        //編譯多型性為我們提供了執行速度快,而執行時多型則有高度靈活和抽象的特點
        public void F()
        {
            Console.WriteLine("vehicle類的F方法,它是非虛virtual方法");
        }
        public virtual void G()
        {
            Console.WriteLine("vehicle類的G方法,它是虛virtual方法");
        }
    }

    class Car : Vehicle
    {
        new public void  F() //
        {
            Console.WriteLine("透過NEW其實是隱藏了父類同名的方法F,而非重寫");
        }

        public override void G()
        {
            Console.WriteLine("重寫了vehicle類的G方法,實現多型性");
        }
    }

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-718083/,如需轉載,請註明出處,否則將追究法律責任。

相關文章