Выбор ответа Senior Основы: типы, обёртки, static обновлено
Переопределённый метод в конструкторе родителя
Вопрос
Что выведет new Child();?
class Parent {
Parent() { print(); }
void print() { System.out.println("parent"); }
}
class Child extends Parent {
private String name = "child";
@Override void print() { System.out.println(name); }
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: null. Конструктор Parent выполняется до инициализаторов полей Child.
Варианты ответа
nullправильный ответchild- Пустую строку
- NullPointerException
Разбор
Конструктор Parent выполняется до инициализаторов полей Child. Он вызывает print(), а это переопределённый метод Child (динамическая диспетчеризация работает уже в конструкторе). Поле name ещё не проинициализировано и равно null, печатается null. NPE нет: конкатенации и println с null не падают. Поэтому из конструктора не вызывают переопределяемые методы.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Что выведет: порядок static и конструкторов
Следующий вопрос
Integer == для 127 и 128
Термины по теме
Ещё по теме «Основы: типы, обёртки, static»
- char плюс int
- Изменили константу в библиотеке
- Деньги в double
- Ключ Long и get(int)
- final ссылка на список
- Автоупаковка
- Порядок инициализации
- Примитивы Java