一.override和new 关键字隐藏父类的方法
正常情况下,父类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(); } }
需要注意的是两种方式隐藏父类方法输出结果不一样,override 输出子类方法
new 输出父类方法
C#中抽象类和接口的区别与使用 :https://www.cnblogs.com/sunzhenyong/p/3814910.html
C#中Abstract 、Virtual和Override的使用 : https://www.cnblogs.com/akwwl/archive/2012/08/03/2622026.html
原文:https://www.cnblogs.com/caomengmeng/p/10050438.html