radhikay Ответов: 1

Пожалуйста объясните как я получил этот результат


абстрактный класс базовый {
Base() { System.out.println("вызывается базовый конструктор"); }
абстрактная пустота веселья();
}
производный класс расширяет базу {
Derived() { System.out.println("вызывается производный конструктор"); }
пустота удовольствие() { система.из.код println("производный удовольствие() называется"); }
}
класс основной {
public static void main(String args[]) {
Производный d = новый производный();
}
}

Вон положил :
Базовый Конструктор Вызывается
Вызывается Производный Конструктор

Что я уже пробовал:

Мой вопрос звучит так :

При вызове конструктора производного класса первым выводимым оператором является "Вызывается производный конструктор Но первое утверждение в выходных данных таково: "Базовый Конструктор Вызывается.

Может ли кто-нибудь объяснить это

1 Ответов

Рейтинг:
1

OriginalGriff

При создании объекта система всегда вызывает базовый конструктор (если он существует) до любые производные конструкторы, чтобы базовый объект был полностью сконструирован и считан для использования до того, как какой-либо дополнительный код попытается его использовать.

Подумайте об этом так: если базовый класс не был построен первым, то производный класс не мог бы использовать что-либо в нем внутри конструктора, потому что он еще не был бы построен!
Предположим, у вас есть базовый элемент управления Label, который устанавливает текст "Arial, 12pt, Black", и вы создаете производный элемент управления RedLabel, который хочет "Arial, 10pt, Red". Если бы производный конструктор был вызван первым, то его изменения в шрифте Базового элемента управления были бы перезаписаны кодом базового конструктора, и он остался бы черным и 12pt.