class Grandparent {
public Grandparent() {
System.out.println("GrandParent Created.");
}
public Grandparent(String string) {
System.out.println("GrandParent Created.String:" + string);
}
}
class Parent extends Grandparent {
public Parent() { super("Hello.Grandparent.");
System.out.println("Parent Created");
//super("Hello.Grandparent."); }
}
class Child extends Parent {
public Child() {
System.out.println("Child Created"); }
}
public class TestInherits {
public static void main(String args[]) { Child c = new Child(); }
}
以上代码执行后结果是这样的:
GrandParent Created.String:Hello.Grandparent.
Parent Created
Child Created
而如果把
class Parent extends Grandparent {
public Parent() { super("Hello.Grandparent.");
System.out.println("Parent Created");
//super("Hello.Grandparent."); }
}
中的上面的super语句注释掉换成下面的super语句则会报错,原因是:
通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句
原因是:
java类构造方式的执行顺是先构造父类,然后构造子类。要初始化子类必须先初始其父类。父类构造器调用就是用Super()来实现的,所以必须是Super。当然你可以不写,但是编译器默认会先执行Super。