这两天恶补了下C#的相关内容,虚函数的概念又挖掘了下,总结如下:

1、C++中函数被定义为虚函数的方法是在函数名前加virtual,虚函数可以有自己的具体内容,也可以不含有函数实现内容,称为纯虚函数。这里未指明为纯虚函数的函数均默认为非纯虚函数。纯虚函数的表示形式为virtual int getNum()=0;后面加"==0"表示函数无实现内容。含有虚函数的类可以实例化,可当作普通类来使用,但含有纯虚函数的类只能被继承后才能使用,且子类中必须实现父类的纯虚函数,这种情况下父类称为抽象类。

2、java中没有虚函数的概念,普通函数就相当于C++中的虚函数,不过可以在函数前加final使函数不能被重写。java中的含有抽象函数,相当于C++中的纯虚函数,java的抽象函数只能在抽象类中定义。java的抽象类不能被实例化,抽象类的子类必须实现全部抽象函数。可见java和C++中,虚函数的相关概念本质上是一致的。

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

可简单对比理解如下:

C++: 虚函数 纯虚函数

java: 普通函数 抽象函数

C#: 虚函数 抽象函数

三种语言相对应的概念是基本一致的。java普通函数就可以被子类重写,而C++、C#中只有虚函数、纯虚函数或抽象函数可以被子类重写;java的纯虚函数及C++、C#的抽象函数对应的类都是抽象类,且抽象类均不能实例化,只能被子类继承。

资料来源:https://zhuanlan.zhihu.com/p/36421120

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

  1. java中虚函数_虚函数

    程序示例 例如,一个基类 Animal 有一个虚函数 eat.子类 Fish 要实做一个函数 eat(),这个子类 Fish 与子类 Wolf 是完全不同的,但是你可以引用类别 Animal 底下的函 ...

  2. java虚成员函数_Java常见知识点汇总(④)——虚函数、抽象函数、抽象类、接口...

    一. Java虚函数 虚函数的存在是为了多态. 它虚就虚在所谓"推迟联编"或者"动态联编"上,一个类函数的调用并不是在编译时刻被确定的,而是在运行时刻被确定的. ...

  3. JAVA – 虚函数、抽象函数、抽象类、接口_对比C++

    1. Java虚函数 虚函数的存在是为了多态. C++中普通成员函数加上virtual关键字就成为虚函数 Java中其实没有虚函数的概念,它的普通函数就相当于C++的虚函数,动态绑定是Java的默认行 ...

  4. 虚函数、抽象函数、抽象类、接口

    1. Java虚函数 虚函数的存在是为了多态. C++中普通成员函数加上virtual关键字就成为虚函数 Java中其实没有虚函数的概念,它的普通函数就相当于C++的虚函数,动态绑定是Java的默认行 ...

  5. 虚函数和抽象函数的区别

    虚函数是有代码的并明确允许子类去覆盖,但子类也可不覆盖,就是说可以直接用,不用重写    抽象函数是没有代码,子类继承后一定要重写 在一个类中用虚函数:    是因为在超类中的有实际代码的方法,但明确 ...

  6. C++中虚函数、虚指针和虚表详解

    关于虚函数的背景知识 用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数. 存在虚函数的类都有一个一维的虚函数表叫做虚表.每一个类的对象都有一个指向虚表开始的虚指针.虚表是和类对应的 ...

  7. C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别

    C++ 在继承中虚函数.纯虚函数.普通函数,三者的区别 1.虚函数(impure virtual) C++的虚函数主要作用是"运行时多态",父类中提供虚函数的实现,为子类提供默认的 ...

  8. Java中的函数传递

    转载自  Java中的函数传递 在C和C++中,函数的传递可以通过函数指针来实现.在C#中,函数传递可以通过委托.Action.Func来实现.Java中没有函数指针.没有委托,那函数要如何传递呢? ...

  9. java 柯里化_函数式编程(Java描述)——Java中的函数及其柯里化

    本文继续上一篇的内容 在Java中,函数可以表现为一个普通的方法.一个lambda表达式,又或者方法引用,甚至是匿名类.本文不会介绍匿名类这种形式. 方法 Java中的方法,Java使用方法这一概念来 ...

最新文章

  1. Android之平台架构
  2. 嵌入式中主动触发hardfault
  3. 多元经验模态分解_环境激励桥梁模态参数识别—环境激励模态参数识别概述
  4. java求面积_Java之简单图形面积计算
  5. struts.xml中class路径错误报错的问题
  6. MaxCompute - ODPS重装上阵 第四弹 - CTE,VALUES,SEMIJOIN
  7. android 生成 资源文件,SVG-Android开源库——SVG生成Vector资源文件的编辑预览工具...
  8. jquery user interface
  9. Quartus II 与ModelSim-SE联合仿真Shift_ram
  10. 如何删除pdf中计算机属性,PDF文件做好后怎么修改
  11. 【PMP】Head First PMP 学习笔记 第十章 沟通管理
  12. assertion failed:concurrent update to the log .mutiple streaming jobs delete 4
  13. leetcode哈希表解决异位词问题
  14. PHP下简单交换两个变量
  15. 【C语言】【笔试题】实现函数itoa(int n,char s[]),将整数n这个数字转换为对应的字符串,保存到s中...
  16. 手机版支付宝html页面,支付宝手机网页支付代码
  17. 目标主机showmount -e信息泄露(CVE-1999-0554),如何禁止只允许特定主机使用showmount -e查看挂载列表
  18. 『YQOI2019』失昼城的守星使 题解
  19. 内存的分类以及各自特征
  20. 邯郸计算机学校排名2015,邯郸初中排名2021最新排名,邯郸初中排名前十的学校有哪些...

热门文章

  1. Mouse Without Borders 一套鼠标键盘控制多台电脑
  2. [云炬创业学笔记]第一章创业是什么测试14
  3. 如何用命令隐藏文件夹
  4. 科大星云诗社动态20210530
  5. 科大星云诗社动态20211102
  6. 简述Hadoop和Spark的异同
  7. python参考手册 豆瓣_python之父亲自撰写两年后豆瓣评分9.8《python深度学习》PDF分享...
  8. 串口通信模块4:串口操作自定义类(1)
  9. C++/CLI Winform中调用DLL的三种方法
  10. 动态加载JS脚本的4种方法