JAVA中多态与C++多态的区别
2024-08-30 08:28:02
原文出自:http://blog.csdn.net/hihui/article/details/8604779
- #include <stdio.h>
- class Base
- {
- public:
- int i;
- Base()
- {
- i = 99;
- amethod();
- }
- virtual void amethod()
- {
- printf("Base.amethod()\n");
- }
- };
- class Derived : public Base
- {
- public:
- int i;
- Derived() {
- i = -1;
- }
- virtual void amethod()
- {
- printf("Derived.amethod()\n");
- }
- };
- int main(int argc, char *argv[])
- {
- Base *b = new Derived();
- printf("%d\n",b->i);
- b->amethod();
- }
其输出结果为:
Base.amethod()
99
Derived.amethod()
同样的java代码
- class Base
- {
- int i = 99;
- public void amethod()
- {
- System.out.println("Base.amethod()");
- }
- Base()
- {
- amethod();
- }
- }
- class Derived extends Base
- {
- int i = -1;
- public void amethod()
- {
- System.out.println("Derived.amethod()");
- }
- public static void main(String argv[])
- {
- Base b = new Derived();
- System.out.println(b.i);
- b.amethod();
- }
- }
其输出结果为
Derived.amethod()
99
Derived.amethod()
差异体现在第一行输出;
这行是在Derived的构造函数中输出的,Derived本身没有构造函数,它只调用父类的构造函数,即Base的amethod();
对于C++代码,执行的是Base::amethod();
对于Java代码,执行的是Derived::amthod();
为什么呢,在C++中调用基类的amethod时,此时子类还没有准备好,故执行的是基类的amethod.
最新文章
- WireShark网络性能分析
- vim下打造python编辑器
- HTML 学习笔记 CSS样式(边框)
- kafka2.9.2的伪分布式集群安装和demo(java api)测试
- C语言 数组 行优先 实现
- dp核心问题研究-从入门到放弃
- PLSQL_性能优化系列15_Oracle Explain Plan解析计划解读
- USB Type-C 连接器规范推出之后,市场很多低质量线材容易损坏设备
- XML1_XML基础
- IP、路由配置
- POJ 3691 &;amp; HDU 2457 DNA repair (AC自己主动机,DP)
- NYOJ 745 蚂蚁问题(两)
- svn conflicts: local delete, incoming delete upon update
- 关于 SVN 项目检出
- 走进Vue时代进阶篇(01):重构电商购物车模块
- [Android FrameWork 6.0源码学习] View的重绘过程之WindowManager的addView方法
- 【刷题】BZOJ 4316 小C的独立集
- javascript之QUnit单元测试
- 洛谷P2059 卡牌游戏 [JLOI2013] 概率dp
- ppp协议介绍(转)
热门文章
- C# BS方向 该如何规划学习?【学习路线指南】
- windows安装Laravel框架经验心得(一)
- 【Azure Developer】【Python 】使用 azure.identity 和 azure.common.credentials 获取Azure AD的Access Token的两种方式
- Mysql数据量较大时分页查询优化
- 第二十九篇 -- UDP和TCP
- 什么是ETL--ETL定义、过程和工具选型思路
- JS_点击事件_弹出窗口_自动消失
- 线性反馈移位寄存器(LFSR)
- Java 中节省 90% 时间的常用的工具类
- Drupal <; 7.32 “Drupalgeddon” SQL注入漏洞(CVE-2014-3704)