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

时间:2010-02-08 21:56:38

标签: java class constructor abstract

以下在Java中对我不起作用。 Eclipse抱怨说没有这样的构造函数。我已经将构造函数添加到子类中以绕过它,但还有另一种方法可以做我正在尝试做的事情吗?

public abstract class Foo {
    String mText;

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

public class Bar extends Foo {

}

Foo foo = new Foo("foo");

2 个答案:

答案 0 :(得分:10)

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

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

e.g。

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

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

public Bar() {
   super(DEFAULT_TEXT);
}

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

答案 1 :(得分:0)

你无法从抽象类中实例化,而这正是你在这里尝试的。你确定你不是故意的:

Bar b = new Bar("hello");

???