读书人

一个基础的有关问题

发布时间: 2012-01-05 22:36:54 作者: rapoo

一个基础的问题
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的时候才会初始化。

因为关系比较复杂,自己要多想想,不好说清楚的。

读书人网 >J2SE开发

热点推荐