Перегрузка метода Java + двойная отправка

Кто-нибудь может подробно объяснить причину перегруженного методаprint(Parent parent) вызывается при работе сChild экземпляр в моем тестовом куске кода?

Есть ли здесь какие-то особенности виртуальных методов или методов перегрузки / разрешения в Java? Любая прямая ссылка на Java Lang Spec? Какой термин описывает это поведение? Большое спасибо.

public class InheritancePlay {

    public static class Parent {        
        public void doJob(Worker worker) {
            System.out.println("this is " + this.getClass().getName());

            worker.print(this);
        }
    }

    public static class Child extends Parent {
    }

    public static class Worker {
        public void print(Parent parent) {
            System.out.println("Why this method resolution happens?");
        }

        public void print(Child child) {
            System.out.println("This is not called");
        }
    }

    public static void main(String[] args) {
        Child child = new Child();
        Worker worker = new Worker();

        child.doJob(worker);
    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос