一、介绍
我们都知道一个类中,子类和父类有同一个方式时,使用多态的父类调用这个方法,不管怎样都只能调用到父类的这个方法,但我们更多的时候是想调用子类的这个方法,多态中的虚方法就是为了解决这个问题的。
二、需求
我们有一个父类Person和子类Chinese:
class Person
{
public void speak()
{
Console.WriteLine("父类说话");
}
}
class Chinese : Person
{
public void speak()
{
Console.WriteLine("中国人说话");
}
}
我们用多态调用方法:
static void Main(string[] args)
{
Person person = new Person();
person.speak();
Person chinese = new Chinese();
chinese.speak();
Console.ReadKey();
}
这时输出结是:父类说话,父类说话,可这并不是我们想要的结果,我们希望本来是什么类型,就输出哪个类型的方法。
三、解决
解决上面的问题,
1、我们就需要讲父类的方法标记为虚方法。关键字:virtual
class Person
{
public virtual void speak()
{
Console.WriteLine("父类说话");
}
}
2、当然,子类还是要重写的标记:关键字:override
class Chinese : Person
{
public override void speak()
{
Console.WriteLine("中国人说话");
}
}
3、直接调用
static void Main(string[] args)
{
Person person = new Person();
person.speak();
Person chinese = new Chinese();
chinese.speak();
Console.ReadKey();
}
这时输出的就是我们想要的结果了,子类是子类的,父类是父类的。