¿Alguien puede explicar en detalle el motivo por el que se invoca el método print(Parent parent)
sobrecargado cuando se trabaja con la instancia Child
en el fragmento de código de prueba?sobrecarga de método Java + envío doble
¿Alguna de las peculiaridades de los métodos virtuales o la sobrecarga/resolución de métodos en Java involucrados aquí? ¿Alguna referencia directa a Java Lang Spec? ¿Qué término describe este comportamiento? Muchas gracias.
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);
}
}
Christian, gracias por la respuesta exhaustiva! Así que tratamos aquí con tipos de tiempo de compilación en tiempo de ejecución. Voy a profundizar mucho en ese tema. (El doble despacho se menciona aquí porque me encontré con esta pregunta aprendiendo el patrón de visitante :)). Max – Max