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

Я видел этот вопрос в одном из моих вопросов:

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

Ответы [ 7 ]

4 голосов
/ 28 мая 2010

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

3 голосов
/ 28 мая 2010

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

2 голосов
/ 28 мая 2010

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

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

1 голос
/ 28 мая 2010

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

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

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

1 голос
/ 28 мая 2010

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

1 голос
/ 28 мая 2010

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

1 голос
/ 28 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...