«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Всегда ли подклассам Java необходимо явно вызывать конструктор суперкласса?

Всегда ли подклассам Java необходимо явно вызывать конструктор суперкласса?

Опубликовано 9 ноября 2024 г.
Просматривать:997

Do Java Subclasses Always Need to Explicitly Call the Superclass Constructor?

Должны ли вы явно вызывать конструктор суперкласса в подклассах Java?

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

Автоматически ли добавляется компилятором super()?

Да, если конструктор подкласса пропускает вызов суперкласса конструктор, компилятор автоматически вызовет доступный конструктор без аргументов (конструктор без аргументов) в суперклассе. Такое поведение по умолчанию известно как цепочка конструкторов.

Типы конструкторов

  • Конструктор без аргументов: Конструктор без параметров.
  • Доступный конструктор без аргументов: Конструктор без аргументов в суперклассе, видимый для подкласса (открытый, защищенный или частный для пакета).
  • Конструктор по умолчанию: Открытый конструктор без аргументов, добавляемый компилятором, когда в классе нет явного конструктора.

Когда есть super( ) Требуется?

Явное использование super() требуется только в том случае, если:

  • У суперкласса нет доступного конструктора без аргументов.
  • The Конструктор подкласса включает параметры, и в этом случае он должен явно вызвать конструктор в суперклассе, который принимает эти параметры.

Пример 1:

public class Base {}
public class Derived extends Base {}

Явный вызов super() не требуется, поскольку у Base есть конструктор по умолчанию.

Пример 2:

public class Base {
    public Base(int i) {}
}
public class Derived extends Base {
    public Derived(int i) {
        super(i); // Explicitly call the Base(int) constructor
    }
}

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

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

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3