在这种情况下调用超级构造函数是多余的吗?

时间:2014-10-08 18:52:37

标签: java class super sup

我一直认为在使用子类创建对象时,我们需要显式使用super(arguments list)来调用超类的构造函数。但是我做了一个实验并意识到即使没有使用super(),超类的构造函数也会被自动调用。这是真的?

如果这是真的,那么super()何时是多余的?何时不是?

class Parent
{
    public Parent()
    {
        System.out.println("Super Class");
    }           

}

class Child extends Parent
{
    public Child()
    {
        super();   //Is this redundant?
        System.out.println("Sub Class");
    }   
}

public class TestClass
{
    public static void main(String[] args) 
    {
        new Child();
    }
}

输出(在子课程中 super();):

Super Class
Sub Class

输出(儿童课程中 super();):

Super Class
Sub Class

2 个答案:

答案 0 :(得分:0)

默认情况下,super()会添加到所有子类中,因此无需显式调用它。

可以使用super(args)调用超类的超重构造函数或使用this(args)重载相同类的构造函数来覆盖默认行为。

假设超类没有无参数构造函数,并且您已经创建了其他构造函数,在这种情况下,您必须显式调用super(args)来解决编译时错误。

答案 1 :(得分:0)

如有疑问,请务必咨询the specification

  

如果构造函数体不是以显式构造函数调用开始,并且声明的构造函数不是原始类Object的一部分,那么构造函数体隐式地以超类构造函数调用开始" super();& #34;,调用其直接超类的构造函数,不带参数。