Что произойдет во время компиляции и выполнения данного кода?

class Base {
    public String name = "Base";
    public String getName() {
        return name;
    }
}

class Sub extends Base {
    public String name = "Sub";
    public String getName() {
        return name;
    }
}

public class Program {
    public static void main(String[] args) {
        Sub s = new Sub();
        Base b = s;
        System.out.println(b.name);
    }
}
Explanation
При обращении к полям используется тип ссылки, а не тип реального объекта. Если бы вместо обращения к полю был вызов переопределенного метода получения значения поля, то благодаря позднему связыванию мы получили бы значение из реального объекта.

Слідкуй за CodeGalaxy

Мобільний додаток Beta

Get it on Google Play
Зворотній Зв’язок
Продовжуйте вивчати
тести з Java
Cosmo
Зареєструйся Зараз
або Підпишись на майбутні тести