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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© smile_joe 中级黑马   /  2013-5-6 19:57  /  1161 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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
复制代码

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 恭喜满25分

查看全部评分

2 个回复

倒序浏览
这个问题我早上也回答了。

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咯。
回复 使用道具 举报
殇_心。 发表于 2013-5-6 20:11
这个问题我早上也回答了。

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

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

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