A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Unicorn319 于 2014-1-16 17:47 编辑

代码如下,问题在最后; 小伙伴们帮帮忙~~  小弟首贴放在这儿了

  1. class animal {        //定义了一个类animal,有一个方法run,
  2.          public void run(){
  3.                 System.out.println("animal is running");
  4.         }
  5. }
  6. class Dog extends animal{//定义了一个类Dog继承animal,复写方法run,
  7.         public void run() {
  8.                 System.out.println("the dog is running");        
  9.         }
  10.         
  11. }
  12. public class demo03 {

  13.         public static void main(String[] args) {
  14.                 //分别以几种方式创建了dog的实例,并运行
  15.                 animal d1=new Dog();
  16.                 Dog d2=new Dog();
  17.                 animal d3=(animal) new Dog();
  18.                
  19.                 ((animal)d1).run();
  20.                 d2.run();
  21.                 d3.run();
  22.         }
  23. }

  24. /**
  25. * 输出:
  26. * the dog is running
  27. * the dog is running
  28. * the dog is running
  29. * 1 为什么输出都是最近子类的方法??
  30. *
  31. * 2 书上说java 会调用合适 的方法,与动态绑定相似
  32. *         那么动态绑定是什么???
  33. *
  34. * 3怎么实现父类的方法?
  35. * */
复制代码


感谢小伙伴们这么快就把问题解决了~  帖子已经改成提问结束, 大家还可以继续留言~


评分

参与人数 1技术分 +1 收起 理由
船长 + 1

查看全部评分

6 个回复

倒序浏览
我感觉是你再怎么强转也没用,你创建的对象就是dog类的,运行的时候就会输出dog类。
你可以想象一下堆内存中就是dog对象嘛

评分

参与人数 1技术分 +1 收起 理由
船长 + 1

查看全部评分

回复 使用道具 举报
Java的动态绑定又称为运行时绑定。意思是,程序会在运行的时候自动选择调用哪儿个方法,因为你在子类中重写了父类的run()方法,java编译器先去找子类中的run方法,如果子类中没有定义相应的方法,则到其父类中寻找run()方法,因此你一直调用的是子类中的方法。
你要调用父类方法,在子类中写一个方法,在方法体中用super.run()调用父类方法

评分

参与人数 2技术分 +1 黑马币 +2 收起 理由
船长 + 1
Unicorn319 + 2 很给力!

查看全部评分

回复 使用道具 举报
银酱 发表于 2014-1-16 17:15
我感觉是你再怎么强转也没用,你创建的对象就是dog类的,运行的时候就会输出dog类。
你可以想象一下堆内存 ...

我本来是抱着“怎么着都有一个能成”的态度去试的。。。没想到全一样。 拿这些表达能干什么么、、、:L
回复 使用道具 举报
qisikudingcha 发表于 2014-1-16 17:34
Java的动态绑定又称为运行时绑定。意思是,程序会在运行的时候自动选择调用哪儿个方法,因为你在子类中重写 ...

哦~ 原来是这样  谢谢!:handshake
回复 使用道具 举报
你把父类的run方法给重写了,那么以后默认都是这个重写的新run方法了
除非你用super.run()才会去调用父类的run方法

评分

参与人数 1技术分 +1 收起 理由
船长 + 1

查看全部评分

回复 使用道具 举报
不冬眠的蚂蚁 发表于 2014-1-16 18:14
你把父类的run方法给重写了,那么以后默认都是这个重写的新run方法了
除非你用super.run()才会去调用父类 ...

好的!  谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马