Выбор ответа Middle Основы: типы, обёртки, static обновлено
Статический метод и наследование
Вопрос
Что выведет код?
class A { static String name() { return "A"; } }
class B extends A { static String name() { return "B"; } }
A obj = new B();
System.out.println(obj.name());
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: A. Статические методы не переопределяются, а скрываются.
Варианты ответа
Aправильный ответB- Ошибка компиляции: статический метод нельзя объявлять в наследнике
- Ошибка компиляции: статический метод нельзя вызывать через ссылку на объект
Разбор
Статические методы не переопределяются, а скрываются. Какой вызвать, решает компилятор по объявленному типу переменной (A), а не по объекту. Поэтому A. Полиморфизм B был бы, если бы методы были экземплярными. Объявить статический метод с той же сигнатурой в наследнике можно (это и есть hiding). Вызов статического метода через ссылку компилируется, хотя IDE предупредит.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Что выведет: поля и статические методы при наследовании
Следующий вопрос
Распаковка null
Термины по теме
Ещё по теме «Основы: типы, обёртки, static»
- char плюс int
- Изменили константу в библиотеке
- Деньги в double
- Ключ Long и get(int)
- final ссылка на список
- Автоупаковка
- Порядок инициализации
- Примитивы Java