Qualcuno può spiegare in dettaglio la ragione per cui il metodo sovraccarico print(Parent parent)
viene richiamato quando si lavora con l'istanza Child
nella mia parte di codice di prova?Sovraccarico del metodo Java + doppia spedizione
Qualunque particolarità dei metodi virtuali o dei metodi di sovraccarico/risoluzione in Java coinvolti qui? Qualsiasi riferimento diretto a Java Lang Spec? Quale termine descrive questo comportamento? Grazie mille.
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, grazie per esauriente risposta! Quindi ci occupiamo di runtime VS compiletime types. Scaverò molto in quell'argomento (La doppia spedizione è menzionata qui perché mi sono imbattuto in questa domanda interpretando il modello molto Visitatore :)). Max – Max