本文转载自参考博客

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虚拟函数_java实现多态中的虚函数相关概念相关推荐

  1. java中正则表达式函数_java正则表达式PHP中的正则表达式函数介绍

    java正则表达式PHP中的正则表达式函数介绍 正则表达式(Regular Expression) 正则表达式系统: 1.POSIX 2.Perl PHP中使用的regex是PCRE: NOTE:PC ...

  2. android java函数_java – 在android中创建全局函数

    像这样创建类并在此处添加您的函数: package com.mytest; import android.content.Context; import android.net.Connectivit ...

  3. C++多态的原理(虚函数指针和虚函数表)

    C++多态的原理 (虚函数指针和虚函数表) 1.虚函数指针和虚函数表 2.继承中的虚函数表 2.1单继承中的虚函数表 2.2多继承中的虚函数表 3.多态的原理 4.总结 1.虚函数指针和虚函数表 以下 ...

  4. (c++)5.4构造函数和析构函数中调用虚函数

    在构造函数和析构函数中调用虚函数时,采用静态联编(他们所调用的虚函数是自己类中定义的函数) 如果在自己类中没有实现这个虚函数,则调用的是基类中的虚函数,绝不会是任何在派生类中重定义的虚函数 //构造函 ...

  5. Java中的抽象函数与C++中的虚函数

    1:java中没有虚函数的概念,但是有抽 象函数的概念,用abstract关键字表示,java中抽象函数必须在抽象类中,而且抽象 函数不能有函数体,抽象类不能被实例化,只能由其子类实现抽象函数,如果某 ...

  6. c++ map 析构函数_C++|类继承关系中的虚函数、虚析构函数、虚基类

    在继承关系中,虚函数.虚析构函数.虚基类中使用的关键字virtual都是在告诉编译器,此处要进行特殊处理: 虚函数:函数重写时的要求编译器动态绑定来实现多多态 : 虚析构函数:当基类指针指向在堆内实现 ...

  7. c++ 虚函数多态、纯虚函数、虚函数表指针、虚基类表指针详解

    文章目录 静态多态.动态多态 虚函数 哪些函数类型不可以被定义成虚函数? 虚函数的访问方式 析构函数中的虚函数 虚函数表指针 vptr 多继承下的虚函数表 虚基类表指针 bptr 纯虚函数 抽象类 虚 ...

  8. 多态指针访问虚函数不能被继承的类快速排序N皇后问题插入排序堆排序merge归并排序栈上生成对象两个栈实现一个队列...

    多态 /*1. 要想实现覆盖(重写)父类必须声明为virtual,子类可以不声明为virtual.-->FunB()2. 派生类重写基类的虚函数实现多态,要求函数名.参数列表.返回值完全相同.( ...

  9. C++对象模型8——构造函数和析构函数中对虚函数的调用、全局对象构造和析构、局部static数组的内存分配

    一.构造函数和析构函数中对虚函数的调用 仍然以https://blog.csdn.net/Master_Cui/article/details/109957302中的代码为例 base3构造函数和析构 ...

最新文章

  1. oracle数据库有哪些文件构成,Oracle数据库架构中包括几层?每层都有什么元素?...
  2. GeenMedical让你知道本领域哪家强,该谁才是真同行,统计检索结果一作、通讯、关键字和国人发文
  3. 本地git存储库关闭_Git 入门:术语基础 | Linux 中国
  4. 原因以及如何避免产生僵尸进程
  5. 牛客 - Shortest Common Non-Subsequence(dp+序列自动机)
  6. 【Java】String,StringBuffer和StringBuilder区别
  7. linux系统中权限有几种,Linux系统中三种基本权限
  8. 面:【1】笔试. mgj 再菜也能做出来,,,有点信心好不好
  9. 最初不相识,最终不相认
  10. c语言链表的插入 查询 删除
  11. jQuery学习第二天——jQuery的常见效果(上)
  12. 光纤收发器具体是怎么使用的?光纤收发器使用方法详解!
  13. Shell 二进制转换成十六进制的方案
  14. java/php/net/python交互体验的电影评价系统设计
  15. Delphi FireMonkey 振动手机
  16. Linux下Oracle常见问题之Oracle ORA-01033 ORACLE initialization or shutdown in progress
  17. Unity中RenderDoc的使用
  18. 互联网晚报 | 10月13日 星期三 | 京东发布“小时购”业务;精锐教育宣布暂停营业;荣耀宣布与谷歌正式恢复合作...
  19. CSRNet: Dilated Convolutional Neural Networks for Understanding the Highly Congested Scenes2018—论文笔记
  20. 小波分析、小波降噪matlab代码实现

热门文章

  1. 共享充电宝方案怎么做
  2. uni-app 杂记
  3. 英飞凌电动汽车参考方案,包含原理图,和Bom清单
  4. Win11系统右键没有解压选项!!!???
  5. 浅谈编程能力的培养与提高——写给编程初学者的话
  6. 逊哥dp专题 总结(普通dp,斜率优化dp,数位dp)
  7. Linux系统之安装PDF阅读器
  8. 在HTML中 怎么一张图片上在放一张图片,css sprites把很多小图集成在一张图片上...
  9. CSS表格与浮动定位
  10. 剑指offer55 二叉树的深度 捏软柿子