一. Java虚函数

虚函数的存在是为了多态。

它虚就虚在所谓“推迟联编”或者“动态联编”上,一个类函数的调用并不是在编译时刻被确定的,而是在运行时刻被确定的。由于编写代码的时候并不能确定被调用的是基类的函数还是哪个派生类的函数,所以被成为“虚”函数。

C++中普通成员函数加上virtual关键字就成为虚函数

Java中其实没有虚函数的概念,它的普通函数就相当于C++的虚函数,动态绑定是Java的默认行为。如果Java中不希望某个函数具有虚函数特性,可以加上final关键字变成非虚函数

PS: 其实C++和Java在虚函数的观点大同小异,异曲同工罢了。

二. Java抽象函数(纯虚函数)

抽象函数或者说是纯虚函数的存在是为了定义接口。

C++中纯虚函数形式为:virtual void print() = 0;

Java中纯虚函数形式为:abstract void print();

PS: 在抽象函数方面C++和Java还是换汤不换药。

三. Java抽象类

抽象类的存在是因为父类中既包括子类共性函数的具体定义,也包括需要子类各自实现的函数接口。抽象类中可以有数据成员和非抽象方法。

C++中抽象类只需要包括纯虚函数,既是一个抽象类。如果仅仅包括虚函数,不能定义为抽象类,因为类中其实没有抽象的概念。

Java抽象类是用abstract修饰声明的类。

PS: 抽象类其实是一个半虚半实的东西,可以全部为虚,这时候变成接口。

四. Java接口

接口的存在是为了形成一种规约。接口中不能有普通成员变量,也不能具有非纯虚函数。

C++中接口其实就是全虚基类。

Java中接口是用interface修饰的类。

PS: 接口就是虚到极点的抽象类。

抽象类和接口的区别 接口不是类,抽象类是一个功能不齐全的类,都不能实例化对象。

一个类可以实现(implements)多个接口。一个类只能继承(extends)一个抽象类。

接口没有构造函数,所有方法都是 public abstract的,一般不定义成员变量。(所有的成员变量都是 static final ,而且必须显示初始化)。 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

一个实现接口的类,必须实现接口内所描述的所有方法(所有方法都是抽象的方法),否则就必须声明为抽象类。

如果一个类包含抽象方法,那么该类必须是抽象类。任何子类必须重写父类的抽象方法,或者声明自身为抽象类。

五. 小结

C++虚函数 == Java普通函数

C++纯虚函数 == Java抽象函数

C++抽象类 == Java抽象类

C++虚基类 == Java接口

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

  1. Java常见知识点汇总

    Java常见知识点汇总 基础概念与常识 1.Java 语言有哪些特点? 2.JVM vs JDK vs JRE 3.什么是字节码?采用字节码的好处是什么? 4.为什么不全部使用 AOT 呢? 5.为什 ...

  2. Java 集合Collection常见知识点汇总~

    看了一些所谓大公司的JAVA面试问题,发现对于JAVA集合类的使用都比较看重似的,而自己在这方面还真的是所真甚少,抽空也学习学习吧. java.util包中包含了一系列重要的集合类,而对于集合类,主要 ...

  3. java面向对象基础代码_JAVA基础知识点之Java面向对象

    特点:1:将复杂的事情简单化. 2:面向对象将以前的过程中的执行者,变成了指挥者. 3:面向对象这种思想是符合现在人们思考习惯的一种思想. 过程和对象在我们的程序中是如何体现的呢? 过程其实就是函数: ...

  4. php cakephp like,cakephp常见知识点汇总

    本文实例总结了cakephp常见知识点.分享给大家供大家参考,具体如下: 1. 调用其他控制器的模板,重定向 方法一: 在此调用/views/tasks/tasks下的hello.ctp模板 $thi ...

  5. 【Lua】常见知识点汇总(包含常见面试考点)

    版权声明:本文为CSDN博主「趁着头发多我想做游戏」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/weixi ...

  6. 什么是高阶函数,常见的高阶函数 有哪些?

    如果一个函数符合下面2个 规范中任何一个,那该函数就是高阶函数 1.若a函数,接收的参数是一个函数,那么a就可以称之为高阶函数 2.若a函数,调用的返回值依然是一个函数,那么a就可以称之为高阶函数. ...

  7. java协变 生产者理解_Java进阶知识点:协变与逆变

    一.背景 要搞懂Java中的协办与逆变,不得不从继承说起,如果没有继承,协变与逆变也天然不存在了. 我们知道,在Java的世界中,存在继承机制.比如MochaCoffee类是Coffee类的派生类,那 ...

  8. java基础的知识_Java基础知识点(一)

    前言:本篇随笔,主要记录Java的基础知识点,不管是用于项目或者面试中,笔者认为都非常有用,所以将持续更新...... 1.Java的访问权限 Java中有四种访问权限:默认访问权限.public.p ...

  9. java开发岗面经常见题汇总

    参考:绝大部分答案来自网络搜索,特别是JavaGuide. 一.Linux常用命令 1 常用命令大全 2 ping , telnet, curl 使用 ping 测试某个地址是否能连接.ping命令本 ...

最新文章

  1. junit5_了解JUnit的Runner架构
  2. php中文歌词,详细介绍HTML5使用Audio标签实现歌词同步的效果
  3. Java线程池:ThreadPoolExecutor运行原理
  4. InputStream与DataInputStream区别
  5. 1.8(学习笔记)监听器(Listener)
  6. 基于JAVA+SpringMVC+Mybatis+MYSQL的在线商城系统
  7. Nginx源码分析 - 主流程篇 - 模块的初始化(12)
  8. eclipse 版本 发行版本
  9. 微信登录OpenId和UnionId区别
  10. visio如何忽略跳线|跨线
  11. 大话设计模式6—模板方法模式(考试抄题)
  12. mac vim映射esc_如何通过重新映射大写锁定来获取Mac的Esc键
  13. swper_Swiper 中文API手册(share)
  14. 渗透测试常用工具-目标识别
  15. 【资源分享(免积分)】增长黑客_创业公司的用户与收入增长秘籍 - 范冰(高清版免费).pdf
  16. 西南民族大学第十届校赛 题解
  17. 软件开发平台之争:NET VS Java,谁是更好的选择?
  18. php批量给文件添加头部版权,给代码添加版权信息
  19. power query 向下填充_Power Query 系列 (12) - Power Query 结构化列应用案例
  20. 聚焦手机操作系统 运营商的“门户”之战

热门文章

  1. linux php应用多台服务器架构,Nginx+PHP-FPM在两台服务器实现
  2. Swift Playgrounds Learn to Code 2 final project Pyramid
  3. html如何获得网址,已知一个网址,如何获得该网址对应的html源代码?在del 找人事管理软件...
  4. 安卓 无权限 访问_U盘提示无权限访问怎么办 电脑U盘访问权限管理
  5. MySQL基础之数据类型介绍
  6. 在python函数中参数分类的详细教程
  7. Python 字符串与列表去重
  8. python和C语言互相调用的几种方式
  9. 加你用移动端数据爬取
  10. python 虚拟环境 virtualenv virtualenvwrapper的使用方法、命令