如何为抽象类的子类声明默认构造函数?

发布于 2024-08-21 01:56:16 字数 283 浏览 5 评论 0原文

以下内容在 Java 中对我不起作用。 Eclipse 抱怨没有这样的构造函数。我已将构造函数添加到子类中以解决它,但是还有其他方法可以完成我想要做的事情吗?

public abstract class Foo {
    String mText;

    public Foo(String text) {
        mText = text;
    }  
}

public class Bar extends Foo {

}

Foo foo = new Foo("foo");

The following doesn't work for me in Java. Eclipse complains that there is no such constructor. I've added the constructor to the sub-class to get around it, but is there another way to do what I'm trying to do?

public abstract class Foo {
    String mText;

    public Foo(String text) {
        mText = text;
    }  
}

public class Bar extends Foo {

}

Foo foo = new Foo("foo");

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

北方的韩爷 2024-08-28 01:56:16

您无法实例化 Foo 因为它是抽象的。

相反,Bar 需要一个调用 super(String) 构造函数的构造函数。

例如,

public Bar(String text) {
   super(text);
}

这里我将 text 字符串传递给超级构造函数。但你可以这样做(例如):

public Bar() {
   super(DEFAULT_TEXT);
}

super() 构造必须是子类构造函数中的第一个语句。

You can't instantiate Foo since it's abstract.

Instead, Bar needs a constructor which calls the super(String) constructor.

e.g.

public Bar(String text) {
   super(text);
}

Here I'm passing the text string through to the super constructor. But you could do (for instance):

public Bar() {
   super(DEFAULT_TEXT);
}

The super() construct needs to be the first statement in the subclass constructor.

兔姬 2024-08-28 01:56:16

您无法从抽象类实例化,这就是您在这里尝试的。你确定你不是说:

Bar b = new Bar("hello");

???

You can't instantiate from an abstract class and that's what you are trying here. Are you sure that you didn't mean:

Bar b = new Bar("hello");

???

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文