Что выведет код 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 ошибок.