2010-05-28 3 views
3

Я видел этот вопрос в одном из моих вопросников:Зачем конструктору производного класса всегда обращаться к конструктору базового класса?

Почему конструктор производного класса всегда должен обращаться к конструктору базового класса?

Мне интересно, действительно ли вопрос?

+1

Потому что базовый класс должен быть построен! – Amarghosh

+0

, потому что базовый класс необходимо построить! –

ответ

1

Поскольку базовый класс может выполнять работу, о которой вы не знаете.

1

Поскольку базовый класс может иметь элементы, требующие инициализации.

4

Чтобы вы могли иметь действительный объект типа «Base», прежде чем вы начнете возиться с унаследованными функциями вашего производного объекта!

1

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

2

Существует одно исключение из всегда, конструктор по умолчанию в суперклассе обычно не называется явным.

Если конструктор явно не вызывает конструктор суперкласса, компилятор Java автоматически вставляет вызов конструктору без аргументов суперкласса. Если у суперкласса нет конструктора без аргументов, вы получите ошибку времени компиляции. У объекта есть такой конструктор, поэтому, если Object является единственным суперклассом, проблем нет.

3

Не действительный. Там нет «должно»: должен, а компилятор принудительно применяет его, вызывая конструктор по умолчанию базового класса, если он существует, и дает вам ошибку компиляции, если это не так, что заставляет вас вызвать один существующих конструкторов.

1

Вызов конструктора суперкласса не является обязательным но должен в пару с сильным посоветуйте - до тех пор, как суперкласс имеет конструктор по умолчанию. В противном случае компилятор заставит вас вызвать хотя бы один из конструкторов суперклассов.

Если конструктор по умолчанию присутствует, он все равно вызывается, даже без явного оператора super() в подклассе construtor.

Видимая часть конструкции класса - это инициализация полей. Но есть еще под капотом (выделение памяти, регистрация и т. Д.). Все это должно быть сделано для всех суперклассов при создании производного класса.

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