Kann jemand im Detail den Grund erklären, warum die überladene Methode print(Parent parent)
aufgerufen wird, wenn mitInstanz in meinem Test Stück Code arbeiten?Java-Methode Überladung + Doppelversand
Irgendwelche Besonderheiten von virtuellen Methoden oder Methoden Überladung/Auflösung in Java beteiligt? Eine direkte Referenz zu Java Lang Spec? Welcher Begriff beschreibt dieses Verhalten? Vielen Dank.
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, danke für die ausführliche Antwort! So behandeln wir hier mit Laufzeit VS compiletime Typen Sache. Ich werde viel über dieses Thema nachdenken. (Doppel-Versand ist hier erwähnt, weil ich über diese Frage rannte über die sehr Besucher Muster :)). max – Max