Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung Nächste ÜberarbeitungBeide Seiten der Revision | ||
faecher:informatik:oberstufe:modellierung:vererbung:polymorphismus:start [29.11.2021 20:55] – [Problemstellung] sbel | faecher:informatik:oberstufe:modellierung:vererbung:polymorphismus:start [29.11.2021 21:05] – [Vererbung und Überschreiben:] sbel | ||
---|---|---|---|
Zeile 49: | Zeile 49: | ||
==== Lösungsansatz: | ==== Lösungsansatz: | ||
+ | |||
+ | * Superklasse und Subklasse definieren | ||
+ | * Jede der Methoden hat Zugriff auf alle Attribute (Felder) ihrer jeweiligen Klasse. | ||
+ | * Der Check des statischen Typs der Superklasse ist erfüllt. | ||
+ | * Die Methode der Subklasse wird erst zur Laufzeit aufgerufen und überschreibt dabei die Version der Superklasse. | ||
+ | |||
+ | Es gibt also '' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Fragen: | ||
+ | * Welche Rolle spielt die Version der Superklasse? | ||
+ | * Welche der '' | ||
+ | |||
+ | |||
+ | ===== Methodenauswahl zur Laufzeit ===== | ||
+ | |||
+ | ==== Ohne Vererbung ==== | ||
+ | |||
+ | Keine Vererbung, kein Polymorphismus, | ||
+ | |||
+ | <code java> | ||
+ | v1.display() | ||
+ | </ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ==== Vererbung, kein Überschreiben ==== | ||
+ | |||
+ | <code java> | ||
+ | v1.display() | ||
+ | </ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Bei der Suche nach der Methode wird die Vererbungshierarchie von unten nach oben durchlaufen (beginnend beim dynamischen Typ), bis zum Treffer – diese Methode wird ausgeführt. | ||
+ | |||
+ | <WRAP center round box 90%> | ||
+ | Die Methode der Superklasse wird also solange von den Versionen der Subklasse(n) „verdeckt“, | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== Vererbung und Überschreiben: | ||
+ | |||
+ | <code java> | ||
+ | v1.display() | ||
+ | </ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Bei der Suche nach der auszuführenden Methode wird die Vererbungshierarchie von unten nach oben durchlaufen (beginnend beim dynamischen Typ), **bis der erste Treffer gefunden wird** – diese Methode wird ausgeführt. Im Beispiel also die Methode, die in '' | ||
+ | |||
+ | ==== Methodenwahl: | ||
+ | |||
+ | - Auf die Variable wird zugegriffen | ||
+ | - Das in der Variable gespeicherte Objekt wird aufgesucht | ||
+ | - Die Klasse des Objekts wird bestimmt | ||
+ | - Implementiert die Klasse die gesuchte Methode? | ||
+ | - Wenn nicht, wird die Superklasse untersucht. | ||
+ | - Schritte 4) und 5) werden solange wiederholt, bis die Methode gefunden wurde oder die Klassenhierarchie bis ganz nach oben durchlaufen wurde. | ||
+ | - Die überschriebenen Methoden verdecken dabei stets die von der Superklasse geerbten Versionen. | ||
===== Material ===== | ===== Material ===== |