虚方法:
public class Animal
{
public virtual void Sleep(){}
public virtual void Eat(){}
}
抽象方法:
public abstract class Animal
{
public abstract void Sleep();
public abstract void Eat();
}
不同点:
-
虚方法必须有实现部分,抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化。
-
抽象方法只能在抽象类中声明,虚方法不是。其实如果类包含抽象方法,那么该类也是抽象的,也必须声明为抽象的。
-
作用效果不太一样:抽象方法,本身不具有真实的方法体,因此方法的功能都以重写的方法为准;虚方法,有方法的声明和实现(小箱子里可以已经存在了东西),子类重写后可以覆盖父类的方法,也可使用默认方法(可更换也可保持原样)。