虚方法:
继承的子类可以不实现父类的虚方法,也可以重写父类的虚方法。如果重写则调用子类重写的方法,如果不重写调用父类的虚方法。
抽象方法:
继承的子类必须实现抽象方法,抽象的方法必须在抽象类中。
什么情况下用虚方法,什么情况下用抽象方法呢?
举个例子:
设计一个父类Animal,定义两个动物的共性:跑和叫。
我们认为绝大多数动物跑都是用腿跑,而极少数动物,比如袋鼠、兔子跑实际上是跳,因而我们用虚方法设计跑,这样大部分子类不用再重写跑这个方法,直接调用父类方法,只有袋鼠、兔子需要重写跑的方法。但是动物的叫声是完全不同的,因而定义一个抽象方法,强制让子类定义动物叫的方法。
代码如下:
public abstract class Animal
{
public virtual void AnimalRun()
{
Console.WriteLine("Run");
}
public abstract void Call();
}
public class Car:Animal
{
public override void Call()
{
Console.WriteLine("CarCall");
}
}
public class Rabbit : Animal
{
public override void AnimalRun()
{
Console.WriteLine("Jump");
}
public override void Call()
{
Console.WriteLine("RabbitCall");
}
}
static void Main(string[] args)
{
Car car = new Car();
car.AnimalRun();
car.Call();
Rabbit rabbit = new Rabbit();
rabbit.AnimalRun();
car.Call();
Console.ReadLine();
}
输出结果:
Run
CarCall
Jump
RabbitCall