标题: 一道java继承的小题,执行逻辑不太明白,求大神解惑 [打印本页] 作者: visen 时间: 2015-8-17 00:07 标题: 一道java继承的小题,执行逻辑不太明白,求大神解惑 我编译运行出来,答案是:YXYZ,但是它的执行逻辑还不是很清楚,求大神解惑呀
class X{
Y b = new Y();
X(){
System.out.print("X");
}
}
class Y{
Y(){
System.out.print("Y");
}
}
public class Z extends X{
Y y = new Y();
Z(){
System.out.print("Z");
}
public static void main(String[] args){
new Z();
}
}作者: sven556677 时间: 2015-8-17 08:07
貌似那个 Y b = new Y();相当于初始化代码块
改了一下后结果如下:
class X{
// Y b = new Y();
{System.out.println("2");}
X(){
System.out.println("X");
}
}
class Y{
Y(){
System.out.print("Y");
}
}
public class Test2 extends X{
// Y y = new Y();
{System.out.println("1");}
Test2(){
System.out.print("Test2");
}
public static void main(String[] args){
new Test2();
}
}
复制代码
作者: sven556677 时间: 2015-8-17 08:37
又想了一下,其实 Y b = new Y();这句话是属于类里面的,new XX首先是加载类,再调用对象的初始化。就像你把 Y b = new Y();这句换成是int a=333;,那所创建的class X和Z中肯定都有这个int a,同理类一加载就会创建Y b这个对象并初始化一次。作者: JXHIUUI 时间: 2015-8-17 08:45
在子类的第一行有一句隐式的语言super( )会先执行,so 你再思考一下!作者: l_15562009298 时间: 2015-8-17 09:47
继承 哪个类 便预加载哪个类,之后才执行当前类作者: iamzk 时间: 2015-8-17 10:38
楼上正解作者: visen 时间: 2015-8-17 22:06