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