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

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
При обращении к полям используется тип ссылки, а не тип реального объекта. Если бы вместо обращения к полю был вызов переопределенного метода получения значения поля, то благодаря позднему связыванию мы получили бы значение из реального объекта.

Follow CodeGalaxy

Mobile Beta

Get it on Google Play
Send Feedback
Keep exploring
Java quizzes
Cosmo
Sign Up Now
or Subscribe for future quizzes