java虚拟函数_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虚拟函数_java实现多态中的虚函数相关概念相关推荐
- java中正则表达式函数_java正则表达式PHP中的正则表达式函数介绍
java正则表达式PHP中的正则表达式函数介绍 正则表达式(Regular Expression) 正则表达式系统: 1.POSIX 2.Perl PHP中使用的regex是PCRE: NOTE:PC ...
- android java函数_java – 在android中创建全局函数
像这样创建类并在此处添加您的函数: package com.mytest; import android.content.Context; import android.net.Connectivit ...
- C++多态的原理(虚函数指针和虚函数表)
C++多态的原理 (虚函数指针和虚函数表) 1.虚函数指针和虚函数表 2.继承中的虚函数表 2.1单继承中的虚函数表 2.2多继承中的虚函数表 3.多态的原理 4.总结 1.虚函数指针和虚函数表 以下 ...
- (c++)5.4构造函数和析构函数中调用虚函数
在构造函数和析构函数中调用虚函数时,采用静态联编(他们所调用的虚函数是自己类中定义的函数) 如果在自己类中没有实现这个虚函数,则调用的是基类中的虚函数,绝不会是任何在派生类中重定义的虚函数 //构造函 ...
- Java中的抽象函数与C++中的虚函数
1:java中没有虚函数的概念,但是有抽 象函数的概念,用abstract关键字表示,java中抽象函数必须在抽象类中,而且抽象 函数不能有函数体,抽象类不能被实例化,只能由其子类实现抽象函数,如果某 ...
- c++ map 析构函数_C++|类继承关系中的虚函数、虚析构函数、虚基类
在继承关系中,虚函数.虚析构函数.虚基类中使用的关键字virtual都是在告诉编译器,此处要进行特殊处理: 虚函数:函数重写时的要求编译器动态绑定来实现多多态 : 虚析构函数:当基类指针指向在堆内实现 ...
- c++ 虚函数多态、纯虚函数、虚函数表指针、虚基类表指针详解
文章目录 静态多态.动态多态 虚函数 哪些函数类型不可以被定义成虚函数? 虚函数的访问方式 析构函数中的虚函数 虚函数表指针 vptr 多继承下的虚函数表 虚基类表指针 bptr 纯虚函数 抽象类 虚 ...
- 多态指针访问虚函数不能被继承的类快速排序N皇后问题插入排序堆排序merge归并排序栈上生成对象两个栈实现一个队列...
多态 /*1. 要想实现覆盖(重写)父类必须声明为virtual,子类可以不声明为virtual.-->FunB()2. 派生类重写基类的虚函数实现多态,要求函数名.参数列表.返回值完全相同.( ...
- C++对象模型8——构造函数和析构函数中对虚函数的调用、全局对象构造和析构、局部static数组的内存分配
一.构造函数和析构函数中对虚函数的调用 仍然以https://blog.csdn.net/Master_Cui/article/details/109957302中的代码为例 base3构造函数和析构 ...
最新文章
- oracle数据库有哪些文件构成,Oracle数据库架构中包括几层?每层都有什么元素?...
- GeenMedical让你知道本领域哪家强,该谁才是真同行,统计检索结果一作、通讯、关键字和国人发文
- 本地git存储库关闭_Git 入门:术语基础 | Linux 中国
- 原因以及如何避免产生僵尸进程
- 牛客 - Shortest Common Non-Subsequence(dp+序列自动机)
- 【Java】String,StringBuffer和StringBuilder区别
- linux系统中权限有几种,Linux系统中三种基本权限
- 面:【1】笔试. mgj 再菜也能做出来,,,有点信心好不好
- 最初不相识,最终不相认
- c语言链表的插入 查询 删除
- jQuery学习第二天——jQuery的常见效果(上)
- 光纤收发器具体是怎么使用的?光纤收发器使用方法详解!
- Shell 二进制转换成十六进制的方案
- java/php/net/python交互体验的电影评价系统设计
- Delphi FireMonkey 振动手机
- Linux下Oracle常见问题之Oracle ORA-01033 ORACLE initialization or shutdown in progress
- Unity中RenderDoc的使用
- 互联网晚报 | 10月13日 星期三 | 京东发布“小时购”业务;精锐教育宣布暂停营业;荣耀宣布与谷歌正式恢复合作...
- CSRNet: Dilated Convolutional Neural Networks for Understanding the Highly Congested Scenes2018—论文笔记
- 小波分析、小波降噪matlab代码实现