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


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

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

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

3 95

3 ответа:

вы никогда нужно просто

super();

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

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

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

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

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

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

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

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

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

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