Компилятор Java использует статическое связывание с типами аргументов, передаваемых в качестве параметров. Это определяет, какая перегрузка вызывается в классе типа переменной здесь A
.
Статический тип ab
равен A
, поэтому единственный метод с именем show
, который соответствует, show(A)
.
JVM использует динамическое связывание с типами времени выполнения объектов, для которых вызываются методы. Это определяет, какой переопределить вызывается. Это полиморфизм.
Тип времени выполнения ab
равен B
. В B
есть переопределение show(A)
, поэтому вызывается метод, который печатает «B и A».