Метод действительно выбирается типом среды выполнения объекта. Что не выбрано типом среды выполнения, так это целое число поле x
. Для объекта B
существует две копии x
, одна для A.x
и одна для B.x
. Вы статически выбираете поле из A
класса, так как тип времени компиляции объекта, возвращаемого getObject
, равен A
. Этот факт можно проверить, добавив метод к A
и B
:
class A {
public String print() {
return "A";
}
}
class B extends A {
public String print() {
return "B";
}
}
и изменение тестового выражения на:
System.out.println(c1.getObject().print());