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。