(1)区别:
①
抽象方法:只有方法名称,没有方法体(也就是没有具体实现),子类必须重写父类的抽象方法
虚函数:该方法由方法体,但是子类可以覆盖,也可以不覆盖
②虚方法有方法体,抽象方法没有方法体。抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化
③抽象方法只能在抽象类中声明,虚方法不是
④派生类必须重写抽象类中的抽象方法,虚方法则不必要
(2)抽象方法:只在抽象类中定义,方法修饰符不能使用private virtual static
public abstract class People
{
public abstract void study();
}
public class Student:People
{
public override void study()
{
Console.WriteLine(“好好学习,天天向上!”);
}
}
public class Program
{
static void Main(string[] args)
{
Student t=new Student();
People p=t;
p.study();
}
}
抽象方法只能声明在抽象类中,使用关键字abstract
抽象类中的抽象方法必须被子类重写
抽象方法没有方法体,子类必须重写方法体,因此抽象方法可以看成是一个没有方法体的虚方法
(3)虚方法:使用virtual修饰的方法,虚方法可以有方法体
virtual修饰符不能与private static abstract override 修饰符同时使用
override修饰符 不能与new static virtual同时使用,并且重写方法只能用于重写基类中的虚方法。
public class BaseClass
{
public virtual string GetName()
{
return “父类虚方法体”;
}
}
public class SubClass:BaseClass
{
public override string GetName()
{
return “重写父类虚方法”;
}
}
父类中的虚方法被派生类重写了
*虚方法的限制:
虚方法仅适用于有继承关系的类对象,所以只有类的成员函数才能说明为虚函数
静态成员函数,内联函数 ,构造函数不能是虚函数
析构函数可以是虚函数