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();
}
}
初学者,不是太懂,求详解,谢谢! 作者: 陈圳 时间: 2013-3-3 14:34
package Day21;
class X
{
Y b = new Y();
X()
{
System.out.print("X");
}
}
class Y
{
Y()
{
System.out.print("Y");
}
}
public class Test1 extends X
{
Y y = new Y();
Test1()
{
super();//这里省略这个.
System.out.print("Z");
}
public static void main(String[] args)
{
new Test1();//程序会先加载Test1,加载成员.遇到类Y->加载Y的构造函数->加载Test1的构造函数,因为它继承了X类,会先调用父类
//的构造函数,载加类X,X类中有Y的成员,调用Y的构造函数.->加载完后,调用Test1类的.
//说明,只要程序中New了新的成员,就会加载其类,并在栈内存开辟空间.
}
}作者: 黄玉昆 时间: 2013-3-3 14:53
class X //建立一个类名为X
{
Y b = new Y();//在X中定义一个B指向Y的对象,此Y为Y类中的对象。初始化输出Y
X()
{
System.out.print("X");//定义一个X的构造方法输出字符串X。
}
}
class Y //建立一个类Y
{
Y()
{
System.out.print("Y");//定义一个Y的构造方法输出字符串Y。
}
}
public class Z extends X //建立一个类Z继承X
{
Y y = new Y(); //定义一个y指向Y的对象,此y等于Y类中的对象。初始化后输出Y,此处为第一步!
Z() //定义一个Z的构造函数,输出字符串Z。这里是关键,定义完因为没调用所以不会显示,直接跳到主函数中
{
//这里隐藏了super.X();输出X。
System.out.print("Z");
}
public static void main(String[] args)
{
new Z();//匿名对象Z,默认调用构造方法初始化,输出字符串“Z”,但因为继承关系所以先输出super.X所以打印先输出X的构造方法
}
}