我一直认为在使用子类创建对象时,我们需要显式使用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
答案 0 :(得分:0)
默认情况下,super()
会添加到所有子类中,因此无需显式调用它。
可以使用super(args)
调用超类的超重构造函数或使用this(args)
重载相同类的构造函数来覆盖默认行为。
假设超类没有无参数构造函数,并且您已经创建了其他构造函数,在这种情况下,您必须显式调用super(args)
来解决编译时错误。
答案 1 :(得分:0)
如有疑问,请务必咨询the specification:
如果构造函数体不是以显式构造函数调用开始,并且声明的构造函数不是原始类Object的一部分,那么构造函数体隐式地以超类构造函数调用开始"
super();
& #34;,调用其直接超类的构造函数,不带参数。