动手实验:继承条件下的构造方法调用
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 调用基类构造方法,必须是子类构造方法中的第一个语句,编译器会先进行对于父类构造方法的调用,如果不是第一条语句,则不符合。

浙公网安备 33010602011771号