Java 中的缺省构造函数

2022-08-31 15:38:15

我知道我在这里问了一些严肃的101问题...

我有一些类和一个扩展的类。在我有一个构造函数中,它采用一组参数,并将其设置为其字段。派生类(如 )通常不需要修改它。现在我的IDE给了我“Foo中没有可用的默认构造函数”。从谷歌搜索来看,这似乎是因为“构造函数不是继承的”。所以一切都很好,但是我现在如何让它工作,而不在每个派生类中重复这个构造函数呢?我假设有一种更理智的方法?FooBarFooFooBar


答案 1

使用构造函数:super

public Bar(int a, double b, ...) {
    super(a, b, ...);
}

答案 2

所以一切都很好,但是我现在如何让它工作,而不在每个派生类中重复这个构造函数呢?

您确实需要复制构造函数签名 - 如果您希望子类具有具有相同签名的构造函数。但是你不需要复制代码 - 你只需要链接到超类构造函数:

public Bar(int x, int y) {
    super(x, y);
    // Any subclass-specific code
}

当然,如果您可以从一组不同的参数中计算出超类参数,那很好。例如:

public Bar(int x) {
    super(x, x * 2);
    // Any subclass-specific code
}

你真的需要弄清楚构造一个需要什么信息 - 这应该决定你的构造函数。Bar

如果这是一个问题,则可能是您过度使用了继承。很难在不了解您的实际类是什么的情况下确定,但您应该考虑使用组合而不是继承。这不是灵丹妙药,但它可以避免这种事情。


推荐