子类不需要父构造函数

时间:2017-08-02 22:15:35

标签: java constructor abstract-class extends

我在Eclipse中编程并发现了一些奇怪的东西......

如果我像这样创建一个类:

public abstract class Test {
    public Test(Object obj) {}
}

任何子课程显然都需要填写super()

同样适用于:

public abstract class Test {
    public Test(Object[] obj) {}
}

那么,当我执行以下操作时,为什么我的IDE不会抱怨,而不提供super()

public abstract class Test {
    public Test(Object... obj) {}
}

在你说"然后运行程序之前,它将失败",我使用了JUnit并且程序运行正常,没有在扩展类中提供构造函数。我的问题是,为什么会发生这种情况?

子类看起来像这样:

public class Child extends Test {
    // Should throw error.
}

1 个答案:

答案 0 :(得分:5)

使用此方法public Test(Object... obj),您可以输入0或更多参数。默认情况下,如果构造函数未显式调用父构造函数,则将隐式调用super()。您不必显式调用它,因为语法Object... obj用于通用情况,无论您是否传入参数。如果你想强制用户传入一个参数,那么你只需要将参数声明为List