package test2; 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. Parent Created Child Created
打开下面第一句的代码,
super("Hello.Grandparent.");
结果:
GrandParent Created.String:Hello.Grandparent. Parent Created Child Created
打开第二句代码,结果报错,Constructor call must be the first statement in a constructor
原因分析:
子类创建对象,调用构造方法时,首先如果未显式写出,则会默认调用父类的无参构造,如果显式的写出使用super调用父类的构造方法,注意:通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句,编译器会先进行对于父类构造方法的调用,如果不是第一条语句,则不符合。
标签:调用,Parent,构造方法,Created,动手,Child,Grandparent,public From: https://www.cnblogs.com/ashuai123/p/16776624.html