/*
public class B {
public B() {
func();
System.out.println("构造 B 方法");
}
public void func() {
System.out.println("B.func");
}
}
public class D extends B{
public D() {
private int num = 1000;
System.out.println("构造 D 对象");
}
public void func() {
System.out.println("D.func " + numm);
}
}
*/
public class Test {
public static void main(String[] args) {
D d = new D();
}
}
这样一个复杂的构造方法中的调用重写问题,最后的输出结果为:
D.func 0
构造 B 方法
构造 D 方法
1.创建一个子类的实例,就会同时创建出一个父类的实例,父类的构造方法先被调用,然后才调用子类的构造方法。
2.在调用父类B的构造方法时,就执行了func(),而此时子类D的func()中num默认值为0,所以执行出来的结果为0