Ich habe einige Artikel über statische Bindung und dynamische Bindung in Java gelesen. Und ich habe folgende Frage (Ich habe viel gesucht, aber keine Erwähnung darüber noch nicht gefunden):Probleme mit statischer Bindung und dynamischer Bindung in Java
Zum Beispiel habe ich folgende Zeilen Code:
Person a = new Student(); // Student is a subclass of Person
a.speak();
Was wir schon bekannt ist, dass zur Kompilierzeit, der Compiler wird überprüft, ob es gibt Method Definition für speak()
in Klasse Person
und nennen Sie es, wenn es existiert. Und zur Laufzeit, wird es die speak()
Methode des eigentlichen Objekts aufrufen, auf die a
zeigt (Das eigentliche Objekt ist in diesem Fall eindeutig Student
)
Also meine Frage ist, warum ist es nicht direkt um den Anruf speak()
Methode der Klasse Student
zur Kompilierzeit, aber warten, bis Laufzeit dies zu tun? Gibt es Gründe dafür?
Weil das Kompilieren Ihrer Software anders ist als das Ausführen. –
Weil * Sie * dem Compiler gesagt haben, dass 'a' als' Person' und nicht als 'Student' behandelt werden soll. Und warum sollte der Code anders als von Ihnen gewünscht kompiliert werden? Welchen Vorteil ziehen Sie für diese andere Strategie an? – Holger