C#、C++、JAVA中虚函数和抽象函数的概念对比
这两天恶补了下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中虚函数和抽象函数的概念对比相关推荐
- java中虚函数_虚函数
程序示例 例如,一个基类 Animal 有一个虚函数 eat.子类 Fish 要实做一个函数 eat(),这个子类 Fish 与子类 Wolf 是完全不同的,但是你可以引用类别 Animal 底下的函 ...
- java虚成员函数_Java常见知识点汇总(④)——虚函数、抽象函数、抽象类、接口...
一. Java虚函数 虚函数的存在是为了多态. 它虚就虚在所谓"推迟联编"或者"动态联编"上,一个类函数的调用并不是在编译时刻被确定的,而是在运行时刻被确定的. ...
- JAVA – 虚函数、抽象函数、抽象类、接口_对比C++
1. Java虚函数 虚函数的存在是为了多态. C++中普通成员函数加上virtual关键字就成为虚函数 Java中其实没有虚函数的概念,它的普通函数就相当于C++的虚函数,动态绑定是Java的默认行 ...
- 虚函数、抽象函数、抽象类、接口
1. Java虚函数 虚函数的存在是为了多态. C++中普通成员函数加上virtual关键字就成为虚函数 Java中其实没有虚函数的概念,它的普通函数就相当于C++的虚函数,动态绑定是Java的默认行 ...
- 虚函数和抽象函数的区别
虚函数是有代码的并明确允许子类去覆盖,但子类也可不覆盖,就是说可以直接用,不用重写 抽象函数是没有代码,子类继承后一定要重写 在一个类中用虚函数: 是因为在超类中的有实际代码的方法,但明确 ...
- C++中虚函数、虚指针和虚表详解
关于虚函数的背景知识 用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数. 存在虚函数的类都有一个一维的虚函数表叫做虚表.每一个类的对象都有一个指向虚表开始的虚指针.虚表是和类对应的 ...
- C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别
C++ 在继承中虚函数.纯虚函数.普通函数,三者的区别 1.虚函数(impure virtual) C++的虚函数主要作用是"运行时多态",父类中提供虚函数的实现,为子类提供默认的 ...
- Java中的函数传递
转载自 Java中的函数传递 在C和C++中,函数的传递可以通过函数指针来实现.在C#中,函数传递可以通过委托.Action.Func来实现.Java中没有函数指针.没有委托,那函数要如何传递呢? ...
- java 柯里化_函数式编程(Java描述)——Java中的函数及其柯里化
本文继续上一篇的内容 在Java中,函数可以表现为一个普通的方法.一个lambda表达式,又或者方法引用,甚至是匿名类.本文不会介绍匿名类这种形式. 方法 Java中的方法,Java使用方法这一概念来 ...
最新文章
- Android之平台架构
- 嵌入式中主动触发hardfault
- 多元经验模态分解_环境激励桥梁模态参数识别—环境激励模态参数识别概述
- java求面积_Java之简单图形面积计算
- struts.xml中class路径错误报错的问题
- MaxCompute - ODPS重装上阵 第四弹 - CTE,VALUES,SEMIJOIN
- android 生成 资源文件,SVG-Android开源库——SVG生成Vector资源文件的编辑预览工具...
- jquery user interface
- Quartus II 与ModelSim-SE联合仿真Shift_ram
- 如何删除pdf中计算机属性,PDF文件做好后怎么修改
- 【PMP】Head First PMP 学习笔记 第十章 沟通管理
- assertion failed:concurrent update to the log .mutiple streaming jobs delete 4
- leetcode哈希表解决异位词问题
- PHP下简单交换两个变量
- 【C语言】【笔试题】实现函数itoa(int n,char s[]),将整数n这个数字转换为对应的字符串,保存到s中...
- 手机版支付宝html页面,支付宝手机网页支付代码
- 目标主机showmount -e信息泄露(CVE-1999-0554),如何禁止只允许特定主机使用showmount -e查看挂载列表
- 『YQOI2019』失昼城的守星使 题解
- 内存的分类以及各自特征
- 邯郸计算机学校排名2015,邯郸初中排名2021最新排名,邯郸初中排名前十的学校有哪些...
热门文章
- Mouse Without Borders 一套鼠标键盘控制多台电脑
- [云炬创业学笔记]第一章创业是什么测试14
- 如何用命令隐藏文件夹
- 科大星云诗社动态20210530
- 科大星云诗社动态20211102
- 简述Hadoop和Spark的异同
- python参考手册 豆瓣_python之父亲自撰写两年后豆瓣评分9.8《python深度学习》PDF分享...
- 串口通信模块4:串口操作自定义类(1)
- C++/CLI Winform中调用DLL的三种方法
- 动态加载JS脚本的4种方法