常见问题梳理系列之虚方法与抽象方法的区别

这与C++不同,相信很多小伙伴因此产生了许多疑惑。抽象方法又叫做纯虚方法,那么虚方法与纯虚方法有什么区别呢?下面我们将展开说说。

抽象方法就是abstract修饰的方法,与虚函数相同,必须被访问,不能是private。

目录

1.关键字不同

2.实现部分不同

3.声明的类的限制不同

 4.重写的限制条件不同

5.实例化条件不同


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("派生类方法");
  }
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nicole Potter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值