Подтвердить что ты не робот

Когда вам нужно явно вызвать конструктор суперкласса?

Так сказать, у меня есть подкласс, который расширяет суперкласс. В каких сценариях мне нужно явно ввести super(), чтобы запустить конструктор суперкласса?

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

Является ли отличием от вызова конструктора по умолчанию/не по умолчанию суперкласса из конструктора по умолчанию/не по умолчанию подкласса?

4b9b3361

Ответ 1

Вам не нужно просто

super();

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

  • Вы хотите вызвать конструктор суперкласса, который имеет параметры
  • Вы хотите привязать к другому конструктору в том же классе вместо конструктора суперкласса

Вы утверждаете, что:

В то же время я также видел примеры здесь, где некоторая проблема явно не вызывала super().

Не могли бы вы привести примеры? Я не могу себе представить, как это возможно...

Ответ 2

Если вы явно не вызываете супер-конструктор, будет вызываться аргумент less constructor (super()). Это означает, что вам нужно вызвать конкретный конструктор самостоятельно, если нет конструктора без аргументов супер-класса.

Но достаточно часто вам нужен другой конструктор, даже если вы можете использовать конструктор по умолчанию - зависит от вашего кода.

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

Ответ 3

Метод super() всегда вызывается в конструкторах подклассов, даже если он явно не написан в коде.

Единственный раз, когда вам нужно написать его, - это если в суперклассе есть несколько методов super (...) с различными параметрами инициализации.