一个基础的问题
public class Test3 extends Test4
{
int i=30;
Test3(){
print();
i=40;
}
void print(){
System.out.println(this.i);
}
}
class Test4 {
int i=10;
Test4(){
print();
i=20;
}
void print(){
System.out.println(this.i);
}
}
class Test3demo{
public static void main(String[] args) {
System.out.println(new Test3().i);
}
}
结果是0,30,40. 30和40好理解 0应该是Test4的print方法 应该是10啊
为什么是0呢??? 谁给解答一下!!!!!
------解决方案--------------------Test3中的print是改写了Test4中的那个
Test3中的print会打印Test3的i,注意,这里是打印Test3的i
Test4的构造中调用了print,因为实际是Test3的实例,所以调用的是Test3的print。但是,在构造Test3之前会构造Test4,而构造Test4的时候,调用了重载的print,这里打印的Test3的i还没有初始化i,所以i就是默认值0了。
i要在构造了Test4之后构造Test3的时候才会初始化。
因为关系比较复杂,自己要多想想,不好说清楚的。