java程序题
class Super{
int i=10;
Super(){
print();
i=20; }
void print(){
System.out.print(i);
}
}
public class Sub extends Super1{
int j=30; Sub(){ print(); j=40; }
void print(){ System.out.print(j); }
public static void main(String[] args){
System.out.print(new Sub().j);
}
}
结果为什么是:03040
------解决方案--------------------
因为实际执行顺序如下:
int i; (缺省值0)
int j; (缺省值0)
super(); (子类无参构造方法自动调用父类无参构造方法)
i=10; (实例变量初始化赋值发生在进入构造方法之后)
print(); (实际调用Sub.print(),因为它覆盖了Super.print(),而本实例是个Sub实例)这里输出j的缺省值0
i=20;
sub();
j=30; (实例变量初始化赋值发生在进入构造方法之后)
print(); 这里输出30
System.out.print(new Sub().j); 这里输出40