Когда вам нужно явно вызвать конструктор суперкласса?
Так сказать, у меня есть подкласс, который расширяет суперкласс. В каких сценариях мне нужно явно ввести super()
, чтобы запустить конструктор суперкласса?
Я рассматриваю пример в книге об абстрактных классах, и когда они расширяют его с помощью не абстрактного подкласса, конструктор по умолчанию подкласса пуст, и есть комментарий, в котором говорится, что будет вызываться конструктор по умолчанию суперкласса. В то же время я также видел примеры здесь, где некоторая проблема явно не вызывала super()
.
Является ли отличием от вызова конструктора по умолчанию/не по умолчанию суперкласса из конструктора по умолчанию/не по умолчанию подкласса?
Ответы
Ответ 1
Вам не нужно просто
super();
Что будет, если вы не укажете ничего другого. Вам нужно указать конструктор для вызова if:
- Вы хотите вызвать конструктор суперкласса, который имеет параметры
- Вы хотите привязать к другому конструктору в том же классе вместо конструктора суперкласса
Вы утверждаете, что:
В то же время я также видел примеры здесь, где некоторая проблема явно не вызывала super().
Не могли бы вы привести примеры? Я не могу себе представить, как это возможно...
Ответ 2
Если вы явно не вызываете супер-конструктор, будет вызываться аргумент less constructor (super()). Это означает, что вам нужно вызвать конкретный конструктор самостоятельно, если нет конструктора без аргументов супер-класса.
Но достаточно часто вам нужен другой конструктор, даже если вы можете использовать конструктор по умолчанию - зависит от вашего кода.
Также обратите внимание: если конструктор не объявлен, компилятор автоматически генерирует конструктор по умолчанию, но как только вы напишете свой собственный конструктор, этого больше не произойдет.
Ответ 3
Метод super() всегда вызывается в конструкторах подклассов, даже если он явно не написан в коде.
Единственный раз, когда вам нужно написать его, - это если в суперклассе есть несколько методов super (...) с различными параметрами инициализации.