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: 抽象类其实是一个半虚半实的东西,可以全部为虚,这时候变成接口。

抽象类是不可以实例化的,也就是不可以new~但是派生类可以继承抽象类里的非抽象方法,重写抽象方法~~然后派生类就可以调用抽象类的方法啦~~

4. Java接口

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

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

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

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

5. 小结

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

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

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

C++虚基类    ==  Java接口  //存在争议,c++的虚基类用在控制重复继承上,表示这个基类在实例化子类时只生成一个副本Java只能单继承,不存在重复继承

转自:http://blog.csdn.net/trojanpizza/article/details/6556604

转载于:https://www.cnblogs.com/Xiegg/p/3596338.html

JAVA--虚函数,抽象函数,抽象类,接口相关推荐

  1. JAVA – 虚函数、抽象函数、抽象类、接口_对比C++

    1. Java虚函数 虚函数的存在是为了多态. C++中普通成员函数加上virtual关键字就成为虚函数 Java中其实没有虚函数的概念,它的普通函数就相当于C++的虚函数,动态绑定是Java的默认行 ...

  2. c++虚继承和虚函数和抽象类、接口类,聚合类

    虚继承 虚继承用于解决多继承条件下的菱形继承问题(浪费存储空间.存在二义性). 底层实现原理与编译器相关,一般通过虚基类指针和虚基类表实现,每个虚继承的子类都有一个虚基类指针(占用一个指针的存储空间, ...

  3. 9-2:C++多态之纯虚函数和抽象类以及接口继承和实现继承

    文章目录 (1)纯虚函数和抽象类的概念 (2)抽象类的意义 (3)接口继承与实现继承 (1)纯虚函数和抽象类的概念 如果一个类的虚函数后面写上=0,同时不写它的实现,那么这样的虚函数称之为纯虚函数,包 ...

  4. C++基本概念复习之二:多重继承、虚继承、纯虚函数(抽象类)

    一.多重继承: #include <iostream> using namespace std; class Horse { public: Horse(){cout<<&qu ...

  5. C++之纯虚函数和抽象类

    纯虚函数和抽象类 1.基本概念 2.案例 #include <iostream> using namespace std;////面向抽象类编程(面向一套预先定义好的接口编程)//解耦合 ...

  6. C++ 纯虚函数与抽象类

    1.虚函数 1.1 虚函数简介 可以毫不夸张地说虚函数是C++最重要的特性之一,我们先来看一看虚函数的概念. 在基类的定义中,定义虚函数的一般形式为: virtual 函数返回值类型 虚函数名(形参表 ...

  7. c++ 纯虚函数和抽象类那些事(一)

    1.纯虚函数与抽象类 C++中的纯虚函数(或抽象函数)是我们没有实现的虚函数!我们只需声明它!通过声明中赋值0来声明纯虚函数! 纯虚函数:没有函数体的虚函数 抽象类:包含纯虚函数的类 /*** @br ...

  8. C++纯虚函数和抽象类

    基本概念 纯虚函数和抽象类 纯虚函数是一个在基类中说明的虚函数,但是在基类中没有定义,要求任何派生类都定义自己的版本 纯虚函数为个派生类提供一个公共界面(接口的封装和设计.软件模块功能的划分) 纯虚函 ...

  9. C++纯虚函数与抽象类

    纯虚函数 1.1纯虚函数是在声明虚函数时被"初始化"为0的函数.声明纯虚函数的一般形式为: virtual 函数类型 函数名 (参数列表) =0; 如 virtual float ...

  10. c/c++入门教程 - 2.4.7 多态、函数地址晚绑定(重写,虚函数,纯虚函数,抽象类,虚析构,纯虚析构)

    目录 4.7 多态 4.7.1 多态的基本概念(超级重要) 4.7.2 多态的原理刨析(超级重要) 4.7.2 多态案例一:计算器类 4.7.3 纯虚函数和抽象类 4.7.4 多态案例二 - 制作饮品 ...

最新文章

  1. LeetCode Decode Ways
  2. 注意力机制的两种形式
  3. 08 | 替换策略: 缓存满了怎么办?
  4. 大型互联网公司架构演进之路汇总
  5. 零基础带你飞web前端教程带你探究web前端趋势
  6. Sql server profiler抓出的语句不可信
  7. sip消息概念(一)
  8. RabbitMQ 镜像集群之同步策略_专栏讲解
  9. ubuntu和linux服务器,Linux服务器系统CentOS和Ubuntu Server如何选择? | 偶乃秋辰
  10. Python与数据库(2)Oracle
  11. 两个not exists_分享两个冷门但又超实用的 Vim 使用技巧!
  12. [Java] 蓝桥杯ALGO-48 算法训练 关联矩阵
  13. 欢迎加入我们的架构师社群
  14. vue+elementui 注册验证用户名是否存在
  15. c语言程序设计伴随矩阵,c语言求方阵的行列式、伴随矩阵算法
  16. 在 Windows 中保存和恢复桌面图标布局
  17. 男女之间没有真正的友谊
  18. 自定义变量的一个有趣案例
  19. 国际上哪个学校计算机专业好,美国计算机专业大学排名前十有哪些?
  20. json数据和字符串json数据相互转换

热门文章

  1. linux io端口复用,Linux系统IO复用接口(select、poll、epoll)
  2. org.eclipse.jdt.internal.compiler.CompilationResult.getProblems()[Lorg/eclipse/jdt/core/compiler/IPr
  3. 数据挖掘十大算法之—C4.5
  4. Oracle SQL Developer 添加SQLServer 和Sybase 连接 .
  5. 说说你对http、https、http2.0的理解【前端每日一题-25】
  6. html5该怎么样学习?零基础入门HTML5学习路线
  7. 文本比较算法Ⅱ——Needleman/Wunsch算法
  8. Linux产生随机数的几种常见方法
  9. 手把手教你做关键词匹配项目(搜索引擎)---- 第六天
  10. formValidator的一些验证实例