我应该定义一个构造函数是一个扩展抽象类的类吗?

时间:2017-06-21 10:09:59

标签: java

如果我有这个抽象类:

package com.abc;

public abstract class Player {
    private String name;

    public Player(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

当我从一个新的扩展一个新类时,新类默认使用继承的构造函数,还是必须创建一个调用“super”的构造函数?

3 个答案:

答案 0 :(得分:5)

默认情况下,它将使用默认的空构造函数;因为你明确地提供了一个构造函数,所以你没有得到默认的构造函数。因此,您必须明确调用super(String)。如果您不想要这个限制,那么您应该为Player添加一个空构造函数。

protected Player() { // <-- only visible to sub-classes.
    // ... implicit super();
}

答案 1 :(得分:3)

默认情况下,如果您没有显式添加构造函数,Java编译器将在其中添加默认构造函数和super()。由于您的Player类具有参数化构造函数,因此您需要调用super

  

我必须创建一个调用“super”的构造函数吗?

是的,您需要显式添加默认构造函数。

public Player() {}

或者,

您可以在子类中添加带有参数的super()。如下所示:

public ChildClass(String name) {
    super(name);
}

如果你想要,你也可以重载构造函数。 read more about constructor overloading和约super()

答案 2 :(得分:2)

由于您的基类Player缺少默认构造函数(如果您提供任何其他构造函数,则会自动删除自动生成的构造函数),派生类中的所有构造函数都需要调用明确的String构造函数。

您可以使用super并为name传递适当的值。这必须是任何子类构造函数中的第一个语句。