Как мне объявить конструктор по умолчанию для подкласса абстрактного класса? - PullRequest
1 голос
/ 09 февраля 2010

Следующее не работает для меня в Java. Затмение жалуется, что такого конструктора не существует. Я добавил конструктор в подкласс, чтобы обойти его, но есть ли другой способ сделать то, что я пытаюсь сделать?

public abstract class Foo {
    String mText;

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

public class Bar extends Foo {

}

Foo foo = new Foo("foo");

Ответы [ 2 ]

10 голосов
/ 09 февраля 2010

Вы не можете создать экземпляр Foo, поскольку он абстрактный.

Вместо этого Bar нужен конструктор, который вызывает конструктор super(String).

, например

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

Здесь я передаю строку text в супер-конструктор. Но вы могли бы сделать (например):

public Bar() {
   super(DEFAULT_TEXT);
}

Конструкция super() должна быть первым оператором в конструкторе подкласса.

0 голосов
/ 09 февраля 2010

Вы не можете создать экземпляр из абстрактного класса, и это то, что вы пытаетесь здесь. Вы уверены, что не имели в виду:

Bar b = new Bar("hello");

???

...