Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
faecher:informatik:oberstufe:modellierung:vererbung:polymorphismus:start [29.11.2021 21:02] – [Vererbung und Überschreiben:] sbel | faecher:informatik:oberstufe:modellierung:vererbung:polymorphismus:start [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Polymorphismus genauer ====== | ||
- | ===== Variablenpolymorphismus ===== | ||
- | |||
- | |||
- | **Polymorphismus** haben wir schon für Variablen kennengelernt: | ||
- | |||
- | {{ : | ||
- | |||
- | |||
- | ---- | ||
- | {{: | ||
- | === (A1) === | ||
- | |||
- | Welche Typen können Werte haben, die in den folgenden Variablen gespeichert werden? | ||
- | < | ||
- | Fahrzeug f; | ||
- | Roller r; | ||
- | vierRaedrig v; | ||
- | </ | ||
- | |||
- | ===== Methodenpolymorphismus ===== | ||
- | |||
- | ==== Problemstellung ==== | ||
- | |||
- | |||
- | Die Vererbungshierarchie unseres soziales Netzwerk mit Vererbung sieht gerade so aus: | ||
- | |||
- | |||
- | {{ : | ||
- | |||
- | Man sieht, dass die Methode zum Anzeigen eines Beitrags in der Klasse '' | ||
- | |||
- | {{ : | ||
- | |||
- | dabei werden die Besonderheiten der Beitragsarten nicht berücksichtigt - der '' | ||
- | |||
- | {{ : | ||
- | |||
- | Die spontane Lösungsidee verschiebt die '' | ||
- | |||
- | {{ : | ||
- | |||
- | **Dieser Versuch ist zum Scheitern verurteilt: | ||
- | |||
- | * Zugriff auf die privaten geeerbten Attribute aus Beitrag ist nicht möglich. | ||
- | * Die Klasse '' | ||
- | |||
- | |||
- | ==== 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. | ||
- | |||
- | ==== 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 '' | ||
- | |||
- | |||
- | ===== Material ===== | ||
- | |||
- | |||
- | {{simplefilelist>: |