正常情况下,父类virtual的方法,子类override
class Animal { public virtual void EatFood() { Console.WriteLine("动物在吃东西"); } } class Cat : Animal { public override void EatFood() { Console.WriteLine("猫在吃鱼"); } } class Program { static void Main(string[] args) { Animal animal = new Cat(); animal.EatFood();//输出的是子类的方法 Console.Read(); } }
另外一种情况,父类的方法不是virtual的,但是子类中有同名的方法
但是子类需要隐藏掉父类的方法
class Animal { public void EatFood() { Console.WriteLine("动物在吃东西"); } } class Cat : Animal { new public void EatFood()//通道new关键字,隐藏掉父类的方法 { Console.WriteLine("猫在吃鱼"); } } class Program { static void Main(string[] args) { Animal animal = new Cat(); animal.EatFood();//输出的是父类的方法 Console.Read(); } }