黑马程序员技术交流社区

标题: 求大神讲解 [打印本页]

作者: yujinpinh    时间: 2015-6-13 21:02
标题: 求大神讲解
此段代码注释求解
class X{
  Y b = new Y();
  X() {
   super();
   System.out.print("X");
  }
}
class Y {
  int a = 19;
  Y() {
   System.out.print("Y");
  }
}
public class Z extends X {
  Y y = new Y();
  Z() {
   super(); //此处求解为什么不访问父类的无参构造
   System.out.print("Z");
  }
  public static void main(String[] args) {
   new Z();
  }
}

作者: xgd6612    时间: 2015-6-13 21:18
....注释是在逗我玩吧     那个就是访问父类的无参构造函数吧~~~ 嫌麻烦可以不写 反正会给你自动加上的
作者: yujinpinh    时间: 2015-6-13 21:28
xgd6612 发表于 2015-6-13 21:18
....注释是在逗我玩吧     那个就是访问父类的无参构造函数吧~~~ 嫌麻烦可以不写 反正会给你自动加上的 ...

结果为什么不是YXYXZ???
作者: xgd6612    时间: 2015-6-13 22:11
不是 yxz?

作者: wenxueaaa555    时间: 2015-6-13 22:30
答案应该是YXYZ
作者: vilion    时间: 2015-6-13 22:42
因为已经在之前X构造过了。super()并不能创建对象,所以不会再执行X()了。
作者: xgd6612    时间: 2015-6-13 23:13
wenxueaaa555 发表于 2015-6-13 22:30
答案应该是YXYZ

第二个Y怎么出来的~~~
作者: xgd6612    时间: 2015-6-13 23:15
vilion 发表于 2015-6-13 22:42
因为已经在之前X构造过了。super()并不能创建对象,所以不会再执行X()了。

x应该没有继承y吧~~~
作者: dcw2015    时间: 2015-6-13 23:18
X没有继承Y ,楼主自己好好检查下代码。
作者: vilion    时间: 2015-6-13 23:19
xgd6612 发表于 2015-6-13 23:13
第二个Y怎么出来的~~~

X类中的Y b = new Y();
这句话就输出Y了
作者: 路途遥远    时间: 2015-6-13 23:33
构造函数最先执行
作者: yujinpinh    时间: 2015-6-14 23:01
点哪里结帖啊
作者: yujinpinh    时间: 2015-6-14 23:05
xgd6612 发表于 2015-6-13 23:13
第二个Y怎么出来的~~~

开始访问父类classX 得到 YX
下一步到  Y y= new Y(); 得到第二个Y




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