关于Implicit super constructor is undefined. Must explicitly invoke another constructor
在做题的过程中遇到了问题,最简单的方法是先去编译器跑一跑。
a)中在Eclipse里跑出来的结果是:
A’s no-arg constructor is invoked
分析一波知道,因为B继承了A类。
在A类的无参构造方法中是直接输出"A’s no-arg constructor is invoked"
虽然B类并没有指定构造方法,但是会有系统默认产生B类的无参构造方法,而B类继承了A类也会输出"A’s no-arg constructor is invoked"
所以在C类的main函数中用B类创建一个实例b,B类继承了A类的无参构造方法,会输出"A’s no-arg constructor is invoked"
b)
class A {
public A(int x) {
}
}
class B extends A {
public B() {
}
}
public class C {
public static void main(String[] args) {
B b = new B();
}
}
编译b中的程序会报错Implicit super constructor A() is undefined. Must explicitly invoke another constructor
如图所示
我们知道B继承了A,所以在构造B之前会先构造A。
B没有人为指定的构造方法,所以new B时是用了系统自动提供的无参构造方法,但是此时B的父类A已经有人为构造方法覆盖了系统的默认无参构造方法,所以B类此时的无参构造法在父类A中并不存在,所以报错。