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

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
faecher:informatik:oberstufe:modellierung:vererbung:polymorphismus:start [29.11.2021 20:57] – [Lösungsansatz: Überschreiben] sbelfaecher:informatik:oberstufe:modellierung:vererbung:polymorphismus:start [03.12.2021 14:01] – [Methodenwahl: Zusammenfassung] sbel
Zeile 55: Zeile 55:
   * 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):+Es gibt also ''display''-Methoden in der Superklasse und in den Subklassen (wenn nötig):
  
-{{ :faecher:informatik:oberstufe:modellierung:vererbung:polymorphismus:newssystem02.drawio.png?600 |}}+{{ :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:*}}