class FatherClass {
public int value;

public void f() {
value = 100;
System.out.println("FatherClass.value=" + value);
value = 100;
System.out.println("FatherClass.value=" + value);
}
}class ChildClass extends FatherClass {
public int value;

ChildClass() {
super.f();
value = 200;
System.out.println("ChildClass.value=" + value);
System.out.println(value);
System.out.println(super.value);
}
}public class InheriteTest {
public static void main(String[] args) {
ChildClass cc = new ChildClass();
cc.f();
}
}
FatherClass.value=100
FatherClass.value=100
ChildClass.value=200
200
100
FatherClass.value=100
FatherClass.value=100
为什么输出结果是这个样子呢?子类的构造方法中没有显式地调用父类的构造方法,而父类中又没有无参构造方法,此时为什么不报错?
我改成
public void f() {
super.f();
value = 200;
System.out.println("ChildClass.value=" + value);
System.out.println(value);
System.out.println(super.value);
}
输出结果又成了FatherClass.value=100
FatherClass.value=100
ChildClass.value=200
200
100
此时父类、子类都没构造方法,为何不出错?

解决方案 »

  1.   

    //子类构造方法中super.f()方法输出 父类中第一个System.out.println("FatherClass.value=" + value);
    FatherClass.value=100 
    //子类构造方法中super.f()方法输出 
    FatherClass.value=100 
    //子类构造方法中System.out.println("ChildClass.value=" + value); 
    ChildClass.value=200  
    //子类中System.out.println(value); 输出
    200
    //子类中System.out.println(super.value); 输出
    100
    //cc.f(); 子类中没有f()方法,调用父类的f()输出2个FatherClass.value=100
    FatherClass.value=100
    FatherClass.value=100 类中不定义构造方法,会自动生成一个无参的构造方法