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
此时父类、子类都没构造方法,为何不出错?
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
此时父类、子类都没构造方法,为何不出错?
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 类中不定义构造方法,会自动生成一个无参的构造方法