Hallo alle zusammen,
ich habe eine Aufgabe zur Polymorphie auf dem Blatt gemacht, nur um sicherzugehen habe ich sie dann auch auf dem Computer geschrieben, um mein Ergebnis zu überprüfen, und ich habe nicht schlecht gestaunt, als da etwas ganz anderes bei rausgekommen ist.
Ausführung der Methode run() ergibt M M M M M M, was von meiner Vermutung A A A A M M abweicht. Ich bin folgendermaßen vorgegangen: Der statische Typ von x und y ist Top, der statische Typ von z ist Middle. Ich dachte, dass Java dann immer in den Klassen vom jeweiligen statischen Typ schaut. Im Falle von Zeile 1 bis Zeile 4 also sucht er in der Klasse Top nach geeigneten Methoden. Dort befindet sich die einzige Methode mit einem Parameter vom Typ All, also ist diese Methode immer geeignet. Dementsprechend sind die ersten vier ausgegebenen Buchstaben A.
Im Falle von Zeile 5 und Zeile 6 ist der statische Typ Middle und in der Klasse Middle ist eine Methode mit einem Parameter vom Typ All, der auch immer funktioniert. Die andere Methode mit Special würde in diesem Fall nicht funktionieren, da weder All noch Most von Special erben beziehungsweise Special sind. Also kommt hier der Buchstabe M raus, insgesamt also A A A A M M. Ich hab mir Erklärungen zu diesem Thema genau angeschaut, mir ist es aber trotzdem ein Rätsel, warum da immer der Buchstabe M rauskommt.
Kann mir jemand helfen?
ich habe eine Aufgabe zur Polymorphie auf dem Blatt gemacht, nur um sicherzugehen habe ich sie dann auch auf dem Computer geschrieben, um mein Ergebnis zu überprüfen, und ich habe nicht schlecht gestaunt, als da etwas ganz anderes bei rausgekommen ist.
Code:
class All {}
class Most extends All {}
class Special extends Most {}
Code:
class Top {
public void m(All p) { System.out.print("A "); }
}
class Middle extends Top {
public void m(All p) { System.out.print("M "); }
public void m(Special p) { System.out.print("L "); }
}
class Bottom extends Middle {
public void m(Most p) { System.out.print("V "); }
public void m(Special p) { System.out.print("X "); }
}
Code:
class Test {
public static void run() {
All all = new All();
Most most = new Most();
Special special = new Special();
Top x = new Middle();
Top y = new Bottom();
Middle z = new Bottom();
x.m(most); //Zeile 1
x.m(special); //Zeile 2
y.m(all); //Zeile 3
y.m(special); //Zeile 4
z.m(all); //Zeile 5
z.m(most); //Zeile 6
}
}
Ausführung der Methode run() ergibt M M M M M M, was von meiner Vermutung A A A A M M abweicht. Ich bin folgendermaßen vorgegangen: Der statische Typ von x und y ist Top, der statische Typ von z ist Middle. Ich dachte, dass Java dann immer in den Klassen vom jeweiligen statischen Typ schaut. Im Falle von Zeile 1 bis Zeile 4 also sucht er in der Klasse Top nach geeigneten Methoden. Dort befindet sich die einzige Methode mit einem Parameter vom Typ All, also ist diese Methode immer geeignet. Dementsprechend sind die ersten vier ausgegebenen Buchstaben A.
Im Falle von Zeile 5 und Zeile 6 ist der statische Typ Middle und in der Klasse Middle ist eine Methode mit einem Parameter vom Typ All, der auch immer funktioniert. Die andere Methode mit Special würde in diesem Fall nicht funktionieren, da weder All noch Most von Special erben beziehungsweise Special sind. Also kommt hier der Buchstabe M raus, insgesamt also A A A A M M. Ich hab mir Erklärungen zu diesem Thema genau angeschaut, mir ist es aber trotzdem ein Rätsel, warum da immer der Buchstabe M rauskommt.
Kann mir jemand helfen?