Когда new B()
, конструктор A называется неявным или называется через super()
. Хотя он определен в классе A, на самом деле текущий класс - B.
Попробуйте добавить информацию об отладке ниже в конструктор и функции A
.
System.out.println(this.getClass());
В вашем случай, функция f () в классе A была переопределена классом B, поэтому функция из A () будет выполнять реализацию B (). Однако, если f () является частным методом и не может быть переопределен B, A.f () будет вызываться с более высокими приоритетами.
Но, как отмечали другие, это не очень хорошая практика.