ich zur Zeit des Erlernen der Programmiersprache Java. In meinem Lektor Notizen fand ich den folgenden Codeausschnitt:Ausgabe von JAVA-Programm [Polymorphismus, Verfahren überwiegende]
class Base{
void g(){
System.out.print("g-Base ");
}
void f(){
System.out.print("f-Base ");
g();
}
}
class Derived extends Base{
public static void main(String[] args) {
Base b = new Derived(); b.f();
}
void g() {
System.out.print("g-Derived ");
}
void f() {
System.out.print("f-Derived "); super.f();
}
}
Die Frage ist: Was ist die Ausgabe dieses Programms ist. Ich kompiliert und es lief und bekam: f-Derived f-Base-g-Derived verstehe ich die f-Derived und f-Basisteile, aber warum es nicht gedruckt „g-Derived“ im letzten Schritt, ich dachte, es haben sollte gewesen "g-Base".
Genau wie '' 'Base b = new Abgeleitet(); b.g(); '' 'würde' '' g-Derived''' ausgeben. –
Ja, aber wenn der Code zu super.f() springt und g() von dort aufruft, sollte es nicht weiter das g() von super aufrufen? – SalysBruoga
Nein, es ist ein dynamischer Aufruf (geschieht zur Laufzeit) auf '' 'this''' '' '' this.g() '' '. '' 'this''' hat den dynamischen Typ' '' Derived''', also wird '' Derived :: g''' aufgerufen. –