faecher:informatik:oberstufe:modellierung:vererbung:polymorphismus:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
faecher:informatik:oberstufe:modellierung:vererbung:polymorphismus:start [29.11.2021 19:50] – [Methodenpolymorphismus] sbelfaecher:informatik:oberstufe:modellierung:vererbung:polymorphismus:start [19.03.2024 09:15] (aktuell) – [Lösungsansatz: Überschreiben] Frank Schiebel
Zeile 1: Zeile 1:
-====== Polymorphismus genauer ======+====== Methodenpolymorphismus ======
  
-===== Variablenpolymorphismus =====+===== Problemstellung =====
  
- 
-**Polymorphismus** haben wir schon für Variablen kennengelernt: Eine Variable eines Supertyps kann auch Werte aller Subtypen halten - die Variable ist //polymorph//. 
- 
-{{ :faecher:informatik:oberstufe:modellierung:vererbung:polymorphismus:fahrzeuge.drawio.png?600 |}} 
- 
- 
----- 
-{{:aufgabe.png?nolink  |}} 
-=== (A1) === 
- 
-Welche Typen können Werte haben, die in den folgenden Variablen gespeichert werden? 
-<code> 
-Fahrzeug f;  
-Roller r; 
-vierRaedrig v; 
-</code>  
- 
-===== Methodenpolymorphismus ===== 
  
 Die Vererbungshierarchie unseres soziales Netzwerk mit Vererbung sieht gerade so aus: Die Vererbungshierarchie unseres soziales Netzwerk mit Vererbung sieht gerade so aus:
Zeile 35: Zeile 17:
 {{ :faecher:informatik:oberstufe:modellierung:vererbung:polymorphismus:auswahl_103.png |}} {{ :faecher:informatik:oberstufe:modellierung:vererbung:polymorphismus:auswahl_103.png |}}
  
 +Die spontane Lösungsidee verschiebt die ''display''-Methode in die Subklassen, so dass jede Subklasse eine eigene ''display''-Methode hat, welche dann natürlich entsprechend der spezifischen Eigenschaften implementiert sein könnte:
 +
 +{{ :faecher:informatik:oberstufe:modellierung:vererbung:polymorphismus:newssystem01.drawio.png?400 |}}
 +
 +**Dieser Versuch ist zum Scheitern verurteilt:** 
 +
 +  * Zugriff auf die privaten geeerbten Attribute aus Beitrag ist nicht möglich.
 +  * Die Klasse ''Newsfeed'' benötigt eine ''display''-Methode in Beitrag.
 +
 +
 +===== Lösungsansatz: Überschreiben =====
 +
 +  * Superklasse und Subklasse definieren  Methoden mit gleicher Signatur. 
 +  * 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 ''display''-Methoden in der Superklasse und in den Subklassen (wenn nötig):
 +
 +{{ :faecher:informatik:oberstufe:modellierung:vererbung:polymorphismus:newssystem02.drawio.png?400 |}}
 +
 +Fragen: 
 +  * Welche Rolle spielt die Version der Superklasse?
 +  * Welche der ''display''-Methoden wird denn zur Laufzeit tatsächlich aufgerufen?
 +
 +
 +===== Methodenauswahl zur Laufzeit =====
 +
 +==== Ohne Vererbung ====
 +
 +Keine Vererbung, kein Polymorphismus, kein Problem -> die offensichtliche Methode wird ausgeführt:
 +
 +<code java>
 +v1.display()
 +</code>
 +
 +{{ :faecher:informatik:oberstufe:modellierung:vererbung:polymorphismus:poly01.png?400 |}}
 +
 +==== Vererbung, kein Überschreiben ====
 +
 +<code java>
 +v1.display()
 +</code>
 +
 +{{ :faecher:informatik:oberstufe:modellierung:vererbung:polymorphismus:poly02.png?400 |}}
 +
 +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“, solange es in den Subklassen Methoden mit gleicher Signatur gibt.
 +</WRAP>
 +
 +
 +
 +
 +
 +==== Vererbung und Überschreiben: ====
 +
 +<code java>
 +v1.display()
 +</code>
 +
 +{{ :faecher:informatik:oberstufe:modellierung:vererbung:polymorphismus:poly03.png?400 |}}
 +
 +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 ''photoBeitrag'' implementiert ist.
 +
 +==== Methodenwahl: Zusammenfassung ====
 +
 +  - 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. 
 +
 +
 +===== Alle Klassen erben von "Object" =====
 +
 +Jede Klasse erbt von Java Object, das kann man beispielsweise erkennen, wenn man einfach mal eine "leere" Klasse erstellt:
 +
 +<code java>
 +class Ball () {
 +
 +}
 +</code>
 +
 +Man kann diesen Ball instanziieren, obwohl er weder Konstruktor noch weitere Methoden enthält:
 +
 +<code java>
 +Hund ball01 = new Ball();
 +</code>
 +
 +Er hat sogar schon Methoden, z.B. die Methode ''toString()'':
 +
 +<code java>
 +ball01.toString();
 +</code>
 +
 +das Erzeugt eine Ausgabe der folgenden Form: 
 +
 +<code>
 +ball01@af54f432
 +</code>
  
  
 +https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html
 ===== Material ===== ===== Material =====
    
  
 {{simplefilelist>:faecher:informatik:oberstufe:modellierung:vererbung:polymorphismus:*}} {{simplefilelist>:faecher:informatik:oberstufe:modellierung:vererbung:polymorphismus:*}}
  • faecher/informatik/oberstufe/modellierung/vererbung/polymorphismus/start.1638215408.txt.gz
  • Zuletzt geändert: 29.11.2021 19:50
  • von sbel