当前位置: 代码迷 >> Java相关 >> java程序题,该如何解决
  详细解决方案

java程序题,该如何解决

热度:9847   发布时间:2013-02-25 21:43:59.0
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
  相关解决方案