原文出自: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. 每天五分钟Go - 指针

    什么是指针 一个指向内存地址的变量,称为指针变量,指针是一个特殊的变量,他的值存储的是另一个值的内存地址 指针变量的声明 var var_name *type var_name 是指针变量的名称,ty ...

  2. Github上比较全的学习路线

    github地址:https://github.com/kamranahmedse/developer-roadmap/blob/master/translations/chinese

  3. navicat连接MySQL数据库出现Authentication plugin 'caching_sha2_password的问题

    1.以管理员身份运行cmd终端,cd 到mysql安装目录的bin文件夹下面 输入mysql -u root -p,回车键后输入密码登录mysql 依次输入一下三条命令: ALTER USER 'ro ...

  4. anyRTC 重磅推出在线实时 K 歌解决方案

    在线音乐领域一直是各大资本巨头投资的热点,从抢占版权到现在的"云上之争", 主流平台的战火从版权资源转向创新领域扩延.而如今,在线K歌正在成为抢占"云音乐"市场 ...

  5. Nginx 解析漏洞

    目录 漏洞复现 漏洞成因 修复方案 参考链接 该漏洞与Nginx.php版本无关,属于用户配置不当造成的解析漏洞. 漏洞复现 访问http://172.17.0.1/uploadfiles/nginx ...

  6. 大写字母与小写字母 相差 一个 空格 A = 65 a = 97 空格 = 32

    1 //大写字母与小写字母 相差 一个 空格 A = 65 a = 97 空格 = 32 2 3 #include <stdio.h> 4 int main() 5 { 6 7 char ...

  7. 【LeetCode】860. 柠檬水找零

    860. 柠檬水找零 知识点:贪心 题目描述 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 ...

  8. tomcat启动时启动窗口出现乱码一招搞定

    先来看看问题(图示),在tomcat的启动窗口打印的启动信息中包含了大量的中文乱码,虽然这些对tomcat本身的使用没有任何影响,但却非常碍眼,影响视觉效果! tomcat启动时启动窗口出现乱码的解决 ...

  9. Servlet中的HttpServletResponse 类

    HttpServletResponse 类的作用:              理解:顾名思义 就是响应客户端的内容, HttpServletResponse 类和 HttpServletRequest ...

  10. Python日志记录

    官方文档:https://docs.python.org/2/library/logging.html logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为, ...