2014-09-02 4 views
0
public A { 

    public A(String arg0) { 
    ... 
    } 

    public A(String arg0, String arg1) { 
    ... 
    } 

} 

public B extends A { 

} 

Я хотел бы, чтобы B автоматически Конструкторы, унаследованные от А без их реализации в явном виде, как:Конструктор наследования

public B(String arg0) { 
    super(arg0); 
} 
public B(String arg0, String arg1) { 
    super(arg0, arg1); 
} 

Как я могу добиться этого?

ответ

8

Вы не можете. Конструкторы не наследуются. Только стандартный по умолчанию автоматически вызывается суперклассами, но все же не «унаследован».

Компилятор автоматически добавит вызов конструктору по умолчанию «super()» в каждый конструктор, если конструктор явно не вызван, и если суперкласс имеет конструктор по умолчанию.

Кроме того, если в классе не указано явно конструктор, компилятор предоставит пустой по умолчанию, который, как указано выше, вызывает конструктор по умолчанию super().

Именно поэтому он «похож» на конструктор по умолчанию «наследуется», но это всего лишь трюк компилятора.

+0

Если суперкласс не имеет конструктора по умолчанию, компилятор выдаст ошибку, так как он не сможет вставить вызов «super()» и требует явного вызова одного из конструкторов, отличных от по умолчанию. Или я что-то пропустил? –

1

Вы не можете. Конструкторы не наследуются между классами, и каждый конструктор подкласса должен вызывать конструктор суперкласса в качестве его первой операции (явно или неявно).

2

вы не .Как Конструкторы не может быть унаследован ребенком можете classes.If мы не писать конструктор в классе, по умолчанию один provided.By используя супер ключевое слово, мы можем назвать родительский класс конструктор, но с одним условием, т. е. это первый оператор в дочернем конструкторе.

Смежные вопросы