为什么子类构造函数必须显式调用超类构造函数?

Joh*_*n W 5 java

可能重复:
为什么this()和super()必须是构造函数中的第一个语句?

为什么子类构造函数必须显式调用超类构造函数?这是什么原因?

Jon*_*eet 17

他们没有.

如果没有显式调用超构造函数,它就等同于调用无参数的超构造函数.

public class Sub
{
    public Sub()
    {
        // Do some stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

相当于:

public class Sub
{
    public Sub()
    {
        super();
        // Do some stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

明确要调用一个超类,如果你想指定的参数.这是非常合理的,IMO - 您真的希望编译器猜测您想要提供哪些参数?

  • @ClaudioFernandez:是的,我希望这是隐含的 - 如果没有无参数构造函数,你就不能隐含地调用它:) (4认同)
  • @Abhishekkumar:不,没有.如果没有指定其他构造函数,编译器将提供默认构造函数*.如果指定带有参数但没有无参数构造函数的构造函数,则尝试从子类隐式调用无参数构造函数将失败. (3认同)