原文出自:http://blog.csdn.net/hihui/article/details/8604779

  1. #include <stdio.h>
  2. class Base
  3. {
  4. public:
  5. int i;
  6. Base()
  7. {
  8. i = 99;
  9. amethod();
  10. }
  11. virtual void amethod()
  12. {
  13. printf("Base.amethod()\n");
  14. }
  15. };
  16. class Derived : public Base
  17. {
  18. public:
  19. int i;
  20. Derived() {
  21. i = -1;
  22. }
  23. virtual void amethod()
  24. {
  25. printf("Derived.amethod()\n");
  26. }
  27. };
  28. int main(int argc, char *argv[])
  29. {
  30. Base *b = new Derived();
  31. printf("%d\n",b->i);
  32. b->amethod();
  33. }

其输出结果为:

Base.amethod()
99
Derived.amethod()

同样的java代码

  1. class Base
  2. {
  3. int i = 99;
  4. public void amethod()
  5. {
  6. System.out.println("Base.amethod()");
  7. }
  8. Base()
  9. {
  10. amethod();
  11. }
  12. }
  13. class Derived extends Base
  14. {
  15. int i = -1;
  16. public void amethod()
  17. {
  18. System.out.println("Derived.amethod()");
  19. }
  20. public static void main(String argv[])
  21. {
  22. Base b = new Derived();
  23. System.out.println(b.i);
  24. b.amethod();
  25. }
  26. }

其输出结果为

Derived.amethod()
99
Derived.amethod()

差异体现在第一行输出;

这行是在Derived的构造函数中输出的,Derived本身没有构造函数,它只调用父类的构造函数,即Base的amethod();

对于C++代码,执行的是Base::amethod();

对于Java代码,执行的是Derived::amthod();

为什么呢,在C++中调用基类的amethod时,此时子类还没有准备好,故执行的是基类的amethod.

JAVA中多态与C++多态的区别的更多相关文章

  1. c#中的里氏转换和Java中强制类型转换在多态中的应用

    在c#中: 注意: 子类并没有继承父类的构造函数,而是会默认调用父类那个无参数的构造函数. 如果一个子类继承了一个父类,那么这个子类除了可以使用自己的成员外,还可以使用从父类那里继承过来的成员.但是父 ...

  2. java中的继承 和多态。

    package com.aaa.zxf.ajax.test; /** *一. java 中的继承和多态. * * 继承的特性? * 1.实现继承的方式 * A 如何建立继承关系(一个类继承于 另一个类 ...

  3. Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例(转)

    Java中==.equals.hashcode的区别与重写equals以及hashcode方法实例  原文地址:http://www.cnblogs.com/luankun0214/p/4421770 ...

  4. java中的sleep()和wait()的区别

    对于sleep()方法,我们首先要知道该方法是属于Thread类中的.而wait()方法,则是属于Object类中的. sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监 ...

  5. java中的this与super的区别

    java中的this与super的区别 1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位 代码如下: class Base { Base() { System.out.pr ...

  6. JAVA中extends 与implements有啥区别?

    JAVA中extends 与implements有啥区别?1. 在类的声明中,通过关键字extends来创建一个类的子类.一个类通过关键字implements声明自己使用一个或者多个接口.extend ...

  7. JAVA中String = null 与 String = "" 的区别

    JAVA中String = null 与 String = ""的区别 笔者今天在Debug的时候发现的NPE(NullPointerException),辛辛苦苦地调试了半天,终 ...

  8. Java中的throw和throws的区别

    Java中的throw和throws的区别 1.throw关键字用于方法体内部,而throws关键字用于方法体部的方法声明部分: 2.throw用来抛出一个Throwable类型的异常,而throws ...

  9. Java中instanceof和isInstance的具体区别

    Java中instanceof和isInstance的具体区别 在Think in Java泛型这一章遇到这个问题,一些博客模糊提到了isInstance是instanceof的动态实现,查阅文档参考 ...

  10. Java中wait和sleep方法的区别

    1.两者的区别 这两个方法来自不同的类分别是Thread和Object 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法(锁代码块和方法锁). wait ...

随机推荐

  1. Day4 包机制 及JavaDoc文档.

    包机制 为了更好地组织类,java提供了包机制,用于区别类名的命名空间. 包的本质是文件夹 它语句的语法格式为: package pkg1[. pkg2 [.pkg3...] ] ; 一般利用公司域名 ...

  2. Java的代理模式

    最近在学习Spring,关于Spring AOP的代理模式不是很了解,看了一篇博文就懂了. https://www.cnblogs.com/cenyu/p/6289209.html Java的三种代理 ...

  3. 【算法学习笔记】概率与期望DP

    本文学习自 Sengxian 学长的博客 之前也在CF上写了一些概率DP的题并做过总结 建议阅读完本文再去接着阅读这篇文章:Here 前言 单纯只用到概率的题并不是很多,从现有的 OI/ACM 比赛中 ...

  4. js实现0ms延时定时器的几种方式

    这两天看到一篇介绍<如何实现准时的 setTimeout?>的文章,文章起源于一道面试题:有什么办法让setTimeout准时呀?具体文章内容可查看附录[1],看完之后,引起了我对setT ...

  5. selenium 鼠标,键盘操作

    1.鼠标操作 导包:from selenium.webdriver.common.action_chains import ActionChains 1.context_click()        ...

  6. QLabel的使用

    现在学习一个简单的控件Label. 第一步:打开designer.exe.拖动一个控件到主窗口,双击可以编辑文字. 第二步:设置字体大小 第三步:设置文字颜色 第四步:设置背景色 第五步:将文字居中 ...

  7. Linux 查看内存命令

    Linux 查看内存命令 top命令, Linux的top命令提供Linux资源使用情况的实时更新信息.不仅可以查看Linux内存,也可以查看CPU以及各个进程之间的对资源的占用情况.使用方式如下: ...

  8. Mysql分区表使用

    一.什么是分区表 分区表就是按一定规则将一张表分割成多个部分,达到和物理分表同样的效果,但操作起来更 简单,不同于物理分表那样使用时还需要指定使用的数据表.对于使用者来说和操作普通表无差别. 二.优势 ...

  9. Verilog定点数计算

    https://blog.csdn.net/maxwell2ic/article/details/80620991 https://blog.csdn.net/mdpsdhr/article/deta ...

  10. 关于document.write()方法重绘页面问题

    学习的时候,document.write()被告知是用来将内容写进页面里面,同时也被告知document.write()方法会重绘页面,但是关于什么时候会重绘,什么时候不会重绘页面没有太多解释. 首先 ...