日期:2014-05-20  浏览次数:20569 次

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