我遇到了继承的执行过程的麻烦,求高手解决?

shiyonghu 2012-10-14 11:38:26
我有这样一程序,我测了他的运行过程,但是我不太理解为啥在调用他的构造函数之前要先调用他在构造函数外面的对象初始化了?

public class X {
Y y = new Y();
X(){
System.out.println("X");
}
}
public class Y {
Y(){
System.out.println("Y");
}
}
public class Z extends X{

Y y1 = new Y();
Z(){
System.out.println("Z");
}
public static void main(String[] args) {
new Z();
}
}
...全文
184 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
public_lcc 2012-10-14
  • 打赏
  • 举报
回复
你的Z是X的子类,那就有了X的属性和方法。

你想问的就是为什么在用它的构造函数实例对象之前,先实例了一个Y的对象对吗?

那是在实例化Z之后才进行的。

在Z继承X以后,Z的实例的方法就成了这样:
new Y();
System.out.println("X");
new Y();
System.out.println("Z");

所以结果是这样,这些都是在实例化z之后进行的,并不是在实例化z之前先运行的构造方法之外的。

lct_mail 2012-10-14
  • 打赏
  • 举报
回复
你也可以不写啊,目的是在验证执行顺序吧
tnjun123456 2012-10-14
  • 打赏
  • 举报
回复
照你的理解是不是 所有的代码快是不是都要写在方法体里面...........
wleexi 2012-10-14
  • 打赏
  • 举报
回复
这是语法。。
jiangbian0507 2012-10-14
  • 打赏
  • 举报
回复
不是一直都这样吗?看看下面的例子:
public class Test4 {
private int a;//等同于private int a = 0;
Test4(int a) {
this.a = a;//如果this.a还没定义又怎么能给它赋值呢?
}
}
罗曙光 2012-10-14
  • 打赏
  • 举报
回复
来晚啦,奥,来错地方啦
shiyonghu 2012-10-14
  • 打赏
  • 举报
回复
我的意思就是验证执行顺序,主要问题是为啥在调用构造函数的时候,为啥不是先输出X,而是先new Y();

谢谢大家的回答。。。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧