Java C++ 比较 – 虚函数、抽象函数、抽象类、接口
【转自】原文
Java – 虚函数、抽象函数、抽象类、接口
1. Java虚函数
虚函数的存在是为了多态。
C++中普通成员函数加上virtual关键字就成为虚函数
Java中其实没有虚函数的概念,它的普通函数就相当于C++的虚函数,动态绑定是Java的默认行为。如果Java中不希望某个函数具有虚函数特性,可以加上final关键字变成非虚函数
PS: 其实C++和Java在虚函数的观点大同小异,异曲同工罢了。
2. Java抽象函数(纯虚函数)
抽象函数或者说是纯虚函数的存在是为了定义接口。
C++中纯虚函数形式为:virtual void print() = 0;
Java中纯虚函数形式为:abstract void print();
PS: 在抽象函数方面C++和Java还是换汤不换药。
3. Java抽象类
抽象类的存在是因为父类中既包括子类共性函数的具体定义,也包括需要子类各自实现的函数接口。抽象类中可以有数据成员和非抽象方法。
C++中抽象类只需要包括纯虚函数,既是一个抽象类。如果仅仅包括虚函数,不能定义为抽象类,因为类中其实没有抽象的概念。
Java抽象类是用abstract修饰声明的类。
PS: 抽象类其实是一个半虚半实的东西,可以全部为虚,这时候变成接口。
4. Java接口
接口的存在是为了形成一种规约。接口中不能有普通成员变量,也不能具有非纯虚函数。
C++中接口其实就是全虚基类。
Java中接口是用interface修饰的类。
PS: 接口就是虚到极点的抽象类。
5. 小结
C++虚函数 == Java普通函数
C++纯虚函数 == Java抽象函数
C++抽象类 == Java抽象类
C++虚基类 == Java接口
Java C++ 比较 – 虚函数、抽象函数、抽象类、接口的更多相关文章
- C++学习基础十二——纯虚函数与抽象类
一.C++中纯虚函数与抽象类: 1.含有一个或多个纯虚函数的类成为抽象类,注意此处是纯虚函数,而不是虚函数. 2.如果一个子类继承抽象类,则必须实现父类中的纯虚函数,否则该类也为抽象类. 3.如果一个 ...
- C++基础(纯虚函数与抽象类)
C++基础之纯虚函数与抽象类 引言 纯虚函数在C++编程中的地位很重要,其关联到了设计模式中"接口"的概念. 语法 纯虚函数的语法: 1. 将成员函数声明为virtual 2. ...
- C++复习:纯虚函数和抽象类
纯虚函数和抽象类 1基本概念 2抽象类案例 3抽象类在多继承中的应用 C++中没有Java中的接口概念,抽象类可以模拟Java中的接口类.(接口和协议) 3.1有关多继承的说明 工程上的多继承 被 ...
- C++开发系列-纯虚函数和抽象类
概念 纯虚函数和抽象类 纯虚函数是一个在基类中说明的虚函数,在基类中没有定义,要求任何派生类都实现该函数. 纯虚函数为各派生类提供了一个公共界面(接口的封装和设计.软件的模块功能的划分) 纯虚函数说明 ...
- cc32b_demo-32dk2j_cpp_纯虚函数与抽象类2-txwtech
cc32b_demo-32dk2j_cpp_纯虚函数与抽象类2-txwtech //纯虚函数是用来继承用的//纯虚函数//抽象类-抽象数据类型//*任何包含一个或者多个纯虚函数的类都是抽象类//*不要 ...
- C++:纯虚函数与抽象类
5.4.3 纯虚函数和抽象类 纯虚函数是一个在基类中说明的虚函数,它在该基类中没有定义,但是要求在派生类中根据需要对它进行定义,或仍然说明为纯虚函数. 声明纯虚函数的一般格式是: virtual 函数 ...
- C++回顾day03---<纯虚函数和抽象类以及虚析构函数,delete使用>
一:纯虚函数和抽象类 纯虚函数是一个在基类中说明的虚函数,在基类中没有定义,要求任何派生类都定义自己的版本 纯虚函数为各个派生类提供一个公共接口 纯虚函数的形式: virtual 类型 函数名(参数列 ...
- c++-纯虚函数和抽象类
纯虚函数和抽象类 C面向接口编程和C多态 函数类型语法基础 函数指针做函数参数(回调函数)思想剖析 函数指针做函数参数两种用法(正向调用.反向调用) 纯虚函数 抽象类 抽象类基本概念 抽象类在多继承中 ...
- cc32a_demo-32dk2j_cpp_纯虚函数与抽象类-txwtech
//32dk2j_cpp_纯虚函数与抽象类cc32a_demo-txwtech//纯虚函数是用来继承用的//纯虚函数//抽象类-抽象数据类型//*任何包含一个或者多个纯虚函数的类都是抽象类//*不要/ ...
随机推荐
- jmeter返回结果是乱码及Unicode转中文
1.结果树中有乱码的处理方式 到bin目录下面修改jmeter的配置文件 使用jmeter进行压测时,如果响应数据的返回结果有乱码,则修改jmeter.properties文件中的该字段的值改为utf ...
- [CTSC1999][网络流24题] 星际转移
36. [CTSC1999][网络流24题] 星际转移 ★★★☆ 输入文件:home.in 输出文件:home.out 简单对比时间限制:1 s 内存限制:128 MB «问题描述: ...
- <2013 10 18> Linux随机数生成器可能确实存在安全弱点
生成随机数是密码学中的一项基本任务,是生成加密密钥和加密算法或加密协议所必不可少的.理想中的随机数是完美的,但实践中的随机数都是用伪随机数生成器(PRNG)生成,随机数的质量对安全性至关重要.安全专家 ...
- <2013 07 22> 游历西欧
从本月11号开始到昨天,10天时间,和其他六位同学畅游了西欧,路经慕尼黑-巴塞罗马-尼斯-马赛-巴黎-阿姆斯特丹,最后回到慕尼黑,每个地方都待了两天,参观了主要的景点和建筑,见识了本地文化与饮食. 令 ...
- POI解析Excel封装工具
1. [代码][Java]代码 跳至 [1] [全屏预览] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 2 ...
- 解决Oracle安装时报错“SID已在使用”办法
1. 开始->设置->控制面板->管理工具->服务 停止所有Oracle服务. 2. 开始->程序->Oracle - OraHome81->Oracle I ...
- django startapp报 maximum recursion depth exceeded
报错截图如下: 解决办法:修改指定路径下的functools.py文件的def total_ordering(cls):方法: 原来的样子: convert = { '__lt__': [('__gt ...
- centos系统时间相差8个小时解决方案
查看当前系统时间 [root@centos64 ~]# date 查看硬件时间 [root@centos64 ~]# hwclock --show 同步时间可以用:ntpdate us.pool.nt ...
- nodejs post请求
const http = require('http'); const querystring = require('querystring'); const postData = querystri ...
- 【云图】怎样制作全国KTV查询系统?
摘要:本文以[唱吧]531麦霸音乐节为案例,具体解读了怎样导入自有数据到高德云图,并进行检索和展示.最后,调起高德mobile地图来进行路线规划和周边查询. 本案例能够应用在微信开发平台,支付宝公众服 ...