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:56] – [Lösungsansatz: Überschreiben] 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.    * Superklasse und Subklasse definieren  Methoden mit gleicher Signatur. 
Zeile 54: Zeile 33:
   * Der Check des statischen Typs der Superklasse ist erfüllt.   * 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.   * 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.1638215772.txt.gz
  • Zuletzt geändert: 29.11.2021 19:56
  • von sbel