c#多态性

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方法,实现多态性");
        }
    }
请使用浏览器的分享功能分享到微信等