一.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