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