这与C++不同,相信很多小伙伴因此产生了许多疑惑。抽象方法又叫做纯虚方法,那么虚方法与纯虚方法有什么区别呢?下面我们将展开说说。
抽象方法就是abstract修饰的方法,与虚函数相同,必须被访问,不能是private。
目录
1.关键字不同
抽象方法是由abstract修饰的方法,而虚函数是由virtual修饰的方法。
2.实现部分不同
虚方法必须有实现部分,而抽象方法没有实现部分。(抽象方法是没有方法体的方法,而且是一种强制派生类覆盖的方法,否则派生类不能被实例化)
//抽象方法
public abstract void Speak();
//虚方法
public virtual void Speak()
{
}
3.声明的类的限制不同
抽象方法只能在抽象类中声明,否则编译器会报错。而虚方法不是。
注意:抽象方法所在的类必须是抽象类,但是抽象类中可以没有抽象方法)
4.重写的限制条件不同
抽象方法必须在派生类中重写(与接口类似),而虚方法不必。
5.实例化条件不同
虚方法可以直接实例化,还可以通过new隐藏基类的虚方法。而抽象不能实例化。
//通过new覆盖隐藏基类方法
//基类
class A
{
public virtual void S()
{
Console.WriteLine("基类方法");
}
}
//派生类
class B:A
{
public new void S()
{
Console.WriteLine("派生类方法");
}
}
//重写基类方法
class A
{
public virtual void S()
{
Console.WriteLine("基类方法");
}
}
//派生类
class B:A
{
public override void S()
{
Console.WriteLine("派生类方法");
}
}