Klausur 23.Februar 2012 Nr. 3

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Klausur 23.Februar 2012 Nr. 3
Hallo zusammen,

ich habe eine Frage zu obenstehender Aufgabe:

Ich verstehe nicht wie man auf Zeile 2 kommt, also nach welchem Schema welche Methode f aufgerufen wird.

z.B.: ad.f(91)

Wähle ich Methode f aus “abstract class Gamma extends Alpha” weil die Methode spezifischer (int gegenüber long) als die überladene Methode f in “class Delta” ist?
Oder aus einem anderen Grund?

Weil dann müsste bei be.f(95) ja auch Methode “public String f(int z)” ausgewählt werden?

Ich hoffe mir kann jemand meinen Denkfehler zeigen :slight_smile:


Kurze Antwort: Es können nur Methoden ausgeführt werden, die der statische Typ kennt.

Bei [m]be[/m] ist der statische Type [m]Beta[/m]. [m]Beta[/m] kennt nur eine Methode [m]f(long)[/m]. Da [m]Beta[/m] keine Methode [m]f(int)[/m] kennt, wird 95 implizit auf [m]long[/m] gecastet und [m]f(long)[/m] aufgerufen.


Ich habe leider auch noch ziemliche Probleme bei diesem Aufgabentyp.
Anschließend daran noch eine Frage zur gleichen Aufgabe

gd.g(83) → FC
gd.g(„YC“) → GC

Jeweils also statischer Typ Gamma und Dynamischer Typ Delta.

gd.g(83) macht nach der Erklärung Sinn. Gamma kennt nur eine Methode f(int), Delta f(long), deshalb wird die Methode f(int) von Gamma aufgerufen.

Bei gd.g(„YC“) scheitert es aber bei mir direkt wieder: Gamma und Delta haben beide eine Methode g(String). Hier hätte ich dann gesagt, dass die Methode der dynamischen Klasse Delta, die der statischen Klasse Gamma überschreibt. Warum ist das nicht so?

Gibt es für diese Aufgaben, bei denen Polymorphie etc. gefragt ist, irgendwelche guten Faustregeln. Ich habe in einem anderen Thread folgendes gelesen:

Das hilft allerdings nicht immer und ist mMn auch nicht ganz richtig.

edit: Ich glaube ich habe mir meine Frage selbst beantwortet. Beim Verdecken von Klassenmethoden wird zur Laufzeit wegen der statisches Bindung immer die Methode des statisches Typs genutzt (Folie 8-97).