结果怎么是0,30,40. 0怎么解释???
class Test6 extends Test5
{
int i=30;
Test6()
{
print();
i=40;
}
public static void main(String[] args)
{
System.out.println(Test6().i);
}
void print()
{
System.out.println(i);
}
}
class Test5
{
int i=10;
Test5()
{
print();
i=20;
}
void print()
{
System.out.println(i);
}
}
class Test6 extends Test5
{
int i=30;
Test6()
{
print();
i=40;
}
public static void main(String[] args)
{
System.out.println(Test6().i);
}
void print()
{
System.out.println(i);
}
}
class Test5
{
int i=10;
Test5()
{
print();
i=20;
}
void print()
{
System.out.println(i);
}
}
这句是不是有问题啊?
public static void main(String[] args)
{
System.out.println(Test6().i);这里有错吧!!!
}
Test6 test6=new Test6();
System.out.println(test6.i);才能执行当一个对象被创建时,初始化是以下面的顺序完成的:
1.设置成员的值为缺省的初始值 (0, false, null)
2. 调用对象的构造方法 (但是还没有执行构造方法体)
3.调用父类的构造方法
4. 使用初始化程序和初始块初始化成员
5. 执行构造方法体
Test6()
{
输出结果只有30
class Test6 extends Test5
{
{
System.out.println("init");
}
int i=30;
Test6()
{
print();
i=40;
}
public static void main(String[] args)
{
System.out.println(new Test6().i);
}
void print()
{
System.out.println("test6.test");
System.out.println(i);
}
}
class Test5
{
int i=10;
Test5()
{
print();
i=20;
}
void print()
{ System.out.println("test5.test");
System.out.println(i);
}
}