Состояние JLS в §8.4.9 Перегрузка :
Итак, в вашем случае:
this
) имеет тип времени компиляции Parent
, и поэтому вызывается метод print(Parent)
. Worker
был подклассом и подкласс будет переопределять этот метод, а экземпляр worker
- этого подкласса, тогда будет вызван переопределенный метод. Двойная отправка не существует на Java. Вы должны имитировать его, например. используя шаблон посетителя . В этом шаблоне, в основном, каждый подкласс реализует метод accept
и вызывает посетителя с this
в качестве аргумента, а this
имеет подкласс типа времени компиляции, поэтому используется перегрузка требуемого метода.