关于java继承条件下的构造方法调用
首先是测试代码:
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(); } }
在运行后,会出现这样的结果:
这是我们的任务
要完成这个任务,首先对代码进行了修改:
public Parent() { super("Hello.Grandparent."); System.out.println("Parent Created"); super("Hello.Grandparent."); }
但发现编译器进行了报错:
也因此发现,对super的调用必须是构造器中的第一个语句.
将后面的super语句删除后,再次运行有:
可以看到,我们成功调用了父类中的另一个构造方法。
从这里我们可以学习到,super的调用必须是构造器中的第一个语句。即