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

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
Зарегистрируйся сейчас
или Подпишись на будущие тесты