【发布时间】:2018-01-10 07:57:01
【问题描述】:
我在 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.
}
【问题讨论】:
-
使用此方法
public Test(Object... obj),您可以输入0个或多个参数,默认情况下,如果构造函数具有0个参数,则super()将隐式调用。这样你就不必调用它了 -
@TuyenNguyen 啊啊啊啊啊!太精彩了。你知道是否存在一个 Annotation 来强制多个?
-
我不认为它有。因为语法
Object... obj用于一般情况,所以你可以传递参数或不传递参数,但你想强制它必须传递参数,那么你只需要使用List代替 -
@TuyenNguyen 好的。非常感谢。您应该考虑将其发布为答案,以便我接受!
-
强制调用者提供至少一个参数:
public Test(Object requiredParam, Object... optionalParams)
标签: java constructor abstract-class extends