黑马程序员技术交流社区

标题: 技术性的题,看看是怎么运行的? [打印本页]

作者: smile_joe    时间: 2013-5-6 19:57
标题: 技术性的题,看看是怎么运行的?
本帖最后由 smile_joe 于 2013-5-6 20:37 编辑
  1. package cn.joe.review;

  2. public class Test14 {
  3.         

  4.                 public static void main(String[] args) {
  5.                         Father f = new Child();
  6.                         System.out.println(f.x);
  7.                 }
  8.         }

  9.         class Father {
  10.                 int x = 10;

  11.                 public Father() {
  12.                         add(20);
  13.                 }

  14.                 public void add(int y) {
  15.                         System.out.println("Father");
  16.                         x += y;
  17.                 }
  18.         }

  19.         class Child extends Father {
  20.                 int x = 9;
  21.                 public void add(int y) {
  22.                         System.out.println("Child");
  23.                         x += y;
  24.                         System.out.println(x + ": :" + y);//
  25.                 }
  26.         
  27. }
  28. //
  29. //        运行结果为: child
  30. //                                                20::20  请问x怎么为20?
  31. //                                                10
复制代码

作者: 殇_心。    时间: 2013-5-6 20:11
这个问题我早上也回答了。

Father f = new Child();//父类引用子类对象。
                    //进入构造函数。调用(this.)add函数。此时this指向子类对象。
                    //也就是调用子类add方法。先是打印Child。
                    //然后计算x += y,而x是子类的成员变量。父类是不知道x的值。
                   //这时jvm会给x赋值为0,y是传过来的参数值为20,x += y 得出 x = 20. 所以就输出20::20咯。
  System.out.println(f.x);// 输出结果为10.   f 是父类引用。 所以当然是输出10咯。
作者: smile_joe    时间: 2013-5-6 20:36
殇_心。 发表于 2013-5-6 20:11
这个问题我早上也回答了。

Father f = new Child();//父类引用子类对象。

就是没有想到这里:
然后计算x += y,而x是子类的成员变量。父类是不知道x的值。

谢谢啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2