Почему при полиморфизме видны переменные подкласса которых нет в суперклассе?
class Greeting{
protected void sayHello(){
System.out.println("hello");
}
}
class GreetingByName extends Greeting{
String name = "Vasya";
@Override
protected void sayHello() {
System.out.println("hello " + name);
}
}
Greeting greeting = new GreetingByName();
greeting.sayHello();
После вызова получится hello vasya, но как видна переменная name(vasya) если её нет в классе который является типом для ссылки? Во время выполнения jvm узнаёт точный тип объекта и работает уже с ним позволяя вызывать при этом только методы прописанные в типе(классе) ссылки?