Polymorphie

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.

Polymorphie
Ich bearbeite gerade die AuD Klausur WS 2012 Aufgabe 3 (Schreibtischlauf).

Es ist eine Polymorphie-Aufgabe. Ich komme aber in manchen Situation nicht drauf, wann der Dynamische Typ und wann der statische Typ verwendet wird. Vorallem wenn die Klassen untereinander noch vererbt werden. Gibt es eine Allgemeine Regel, wann eine Variable den Statischen bzw. dynamischen Typen annimmt? Wenn das geklärt ist sollte man ja einfach die Vererbungen verfolgen können und so den richtigen Wert bekommen.

Bei Methoden ist dies ja recht einfach, da bei einer static methode immer die methode des statischen Typs und bei non static die des dynamischen Typs verwendet wird.


Ja, diese Regel gilt aber nur bei gleicher Signatur (Name, Parametertypen und -anzahl und meistens auch Rückgabetyp sind identisch).

Ansonsten gilt immer: du musst alle in Betracht kommenden Methoden der Ober- und Unterklasse betrachten. An dieser Stelle wichtig: wenn der statische Typ ein Interface ist und die implementierende Klasse (dynamischer Typ) zusätzlich noch eine Oberklasse hat, dann musst du auch diese Oberklasse betrachten, viele schauen hier nur auf das Interface und die implementierende Klasse, was aber zu Fehlern führen kann.

Dann musst du nur noch auf die übergebenen Parameter schauen (z. B. passt der Wert bzw. die Schreibweise zu einem int oder long Datentyp?). Anhand dessen wird dann die Methode ausgewählt.
Oh und bei Attributen ist sowieso immer statische Bindung, da muss man nicht nachdenken.