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:55] – [Problemstellung] 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 ===== +
- +
-==== Problemstellung ====+
  
  
Zeile 48: Zeile 27:
  
  
-==== Lösungsansatz: Überschreiben ====+===== 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.1638215744.txt.gz
  • Zuletzt geändert: 29.11.2021 19:55
  • von sbel