C#、C++、JAVA中虚函数和抽象函数的概念对比

C#、C++、JAVA中虚函数和抽象函数的概念对比

原文地址


1、C++中函数被定义为虚函数的方法是在函数名前加virtual,虚函数可以有自己的具体内容,也可以不含有函数实现内容,称为纯虚函数。这里未指明为纯虚函数的函数均默认为非纯虚函数。纯虚函数的表示形式为virtualintgetNum()=0;后面加"==0"表示函数无实现内容。含有虚函数的类可以实例化,可当作普通类来使用,但含有纯虚函数的类只能被继承后才能使用,且子类中必须实现父类的纯虚函数,这种情况下父类称为抽象类。
2、java中没有虚函数的概念,普通函数就相当于C++中的虚函数,不过可以在函数前加final使函数不能被重写。java中的含有抽象函数,相当于C++中的纯虚函数,java的抽象函数只能在抽象类中定义 。java的抽象类不能被实例化,抽象类的子类必须实现全部抽象函数。可见java和C++中,虚函数的相关概念本质上是一致的。

3、C#整合了java和C++,对虚函数有了更明细的划分。定义了虚函数和抽象函数。虚函数定义时,在函数前加virtual,函数必须有实现,在子类中可以重写也可以不重写虚函数,重写虚函数时应在重写的函数前加override关键字。抽象函数不能含有函数实现,类似于接口,在继承的子类中必须重写该函数。另外,抽象函数只能定义在抽象类中,在普通类中定义抽象函数会报错。

可简单对比理解如下:

C++: 虚函数   纯虚函数
java: 普通函数 抽象函数
C#:  虚函数   抽象函数
   三种语言相对应的概念是基本一致的。java普通函数就可以被子类重写,而C++、C#中只有虚函数、纯虚函数或抽象函数可以被子类重写;C++的纯虚函数及Java、C#的抽象函数对应的类都是抽象类,且抽象类均不能实例化,只能被子类继承。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值