Является ли наличие super() в конструкторах необязательным?
В объектно-ориентированном программировании обычной практикой является использование конструкторов в производных классах вызывать конструкторы в их суперклассах. Однако некоторые разработчики сомневаются в необходимости явного указания super() внутри конструкторов.
Автоматический вызов super() компилятором
Компилятор Java автоматически вставляет вызов метода доступный конструктор суперкласса без аргументов, если конструктор подкласса не указывает конструктор суперкласса. Это означает, что в большинстве случаев отсутствие super() не влияет на поведение программы.
Исключения из правила
Однако бывают ситуации где требуется явный вызов super():
Использование конструктора при наличии аргументов
Когда конструктор подкласса имеет аргументы, Конструктор подкласса несет ответственность за передачу соответствующих аргументов конструктору суперкласса. Компилятор не будет автоматически вызывать конструктор суперкласса с аргументами, если это явно не указано.
Пример
Рассмотрите следующий код:
public class Base {
private Base() {}
}
public class Derived extends Base {
public Derived(int i) {
super(); // Call the default no-args constructor of Base
}
}
В этом примере вызов super() в конструкторе Derived необходим, поскольку у Base есть частный конструктор без аргументов.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3