Was bedeutet der Begriff Polymorphie wörtlich?
Vielgestalt
Was bezeichnet Polymorphie in objektorientierten Systemen?
Die Tatsache, dass eine Variable, die vom Typ einer bestimmten Klasse deklariert ist, auch Instanzen der Unterklassen dieser Klasse annehmen kann.
Was ermöglicht Polymorphie konkret bei Methodenaufrufen?
Über ein und dieselbe Variable verschiedene Methodenimplementierungen aufzurufen, je nachdem, welches Objekt der Variable zur Laufzeit tatsächlich zugewiesen ist.
Voraussetzung für Polymorphie zwischen mehreren Klassen?
Die Klassen müssen in einer Vererbungsbeziehung zueinander stehen.
Wodurch spezialisieren die einzelnen Unterklassen ihr Verhalten im Rahmen der Polymorphie?
Indem sie geerbte Methoden überschreiben.
Was erlaubt Polymorphie in Bezug auf die Behandlung von Unterklassen-Instanzen?
Alle Instanzen der Unterklassen als Objekte der Oberklasse zu behandeln und trotzdem auf die jeweilige spezielle Implementierung der Methoden zuzugreifen.
Wer entscheidet, welche Methoden auf einer Variable aufgerufen werden können, und wer entscheidet, welche konkrete Implementierung davon ausgeführt wird?
Der Typ der Variable entscheidet, welche Methoden aufgerufen werden können; die Instanz der Klasse (das tatsächliche Objekt zur Laufzeit) entscheidet, welche Implementierung dieser Methoden ausgeführt wird.
Was ermöglicht Polymorphie im Hinblick darauf, die konkrete Unterklasse eines Objekts zu kennen?
Methoden von Objekten aufzurufen, ohne wissen zu müssen, zu welcher konkreten Unterklasse diese Objekte gehören – es zählt nur, dass die Objekte die benötigte Funktionalität implementieren.
Wozu kann der instanceof-Operator zur Laufzeit genutzt werden?
instanceof
Um zu testen, zu welcher Klasse eine Instanz gehört (Test auf Klassenzugehörigkeit).
Was passiert mit den Vorteilen der Polymorphie, wenn man instanceof einsetzt, um gezielt auf eine bestimmte Klasse zu testen?
→ Sie werden aufgehoben – man testet dann auf eine ganz spezifische Klassenzugehörigkeit und kann nicht mehr unabhängig mit beliebigen Unterklassen-Instanzen arbeiten.
Was sollte man laut Skript stattdessen überdenken, bevor man instanceof einsetzt, um spezielle Vorbereitungen für eine bestimmte Klasse zu treffen?
Ob diese Vorbereitungen nicht auch vom betreffenden Objekt selbst (z. B. über eine überschriebene Methode) getroffen werden können, um die Abfrage nach der konkreten Klasse zu vermeiden.
Warum ist Polymorphie ohne Vererbung nicht möglich?
Polymorphie beruht darauf, dass eine Variable eines Oberklassen-Typs Objekte verschiedener Unterklassen annehmen kann und dabei automatisch die jeweils passende (überschriebene) Methodenimplementierung ausgeführt wird. Ohne Vererbungsbeziehung gäbe es weder die Zuweisungskompatibilität (Unterklassen-Objekt einer Oberklassen-Variable zuweisen) noch das Konzept des Überschreibens, auf dem die unterschiedlichen Implementierungen basieren.
Erkläre den Unterschied zwischen "welche Methode aufgerufen werden kann" und "welche Implementierung dabei ausgeführt wird" an einem Beispiel mit einer Variable vom Typ "Artikel".
Eine Variable vom Typ Artikel erlaubt nur den Aufruf von Methoden, die in Artikel definiert sind (z. B. getBeschreibung()) – das legt der Typ der Variable fest. Ist der Variable aber zur Laufzeit ein Buch-Objekt zugewiesen, wird beim Aufruf von getBeschreibung() die in Buch überschriebene Implementierung ausgeführt (nicht die von Artikel) – das legt die tatsächliche Instanz fest. Derselbe Methodenaufruf liefert also je nach zugewiesenem Objekt ein unterschiedliches Ergebnis.
Artikel
getBeschreibung()
Buch
Warum gilt der Einsatz von instanceof in polymorphem Code eher als Warnsignal für ein Designproblem?
Der eigentliche Vorteil der Polymorphie ist, dass man Objekte einheitlich über die Oberklasse behandeln kann, ohne die konkrete Unterklasse zu kennen. Wird stattdessen mit instanceof explizit auf eine bestimmte Unterklasse geprüft und darauf reagiert, wird dieser Vorteil unterlaufen – der Code wird wieder von der konkreten Klasse abhängig, was Wartbarkeit und Erweiterbarkeit einschränkt. Oft lässt sich die "Sonderbehandlung" stattdessen sauberer über eine überschriebene Methode im jeweiligen Objekt selbst lösen.
Erkläre am Beispiel des Aufrufs getBeschreibung() auf einer Variable vom Typ "Artikel", wie Polymorphie in Herrn Kochs System wirkt.
Herr Koch deklariert eine Variable vom Typ Artikel, der zur Laufzeit z. B. ein Buch-, Musikartikel- oder Film-Objekt zugewiesen sein kann. Ruft er auf dieser Variable getBeschreibung() auf, entscheidet nicht der deklarierte Typ Artikel, sondern die tatsächlich zugewiesene Instanz, welche überschriebene Implementierung ausgeführt wird – bei einem Buch-Objekt die Buch-spezifische Beschreibung (mit Autor), bei einem Film-Objekt die Film-spezifische (mit Regisseur). So bekommt Herr Koch von jedem Artikel automatisch die passende Beschreibung, ohne im Code unterscheiden zu müssen, um welche konkrete Artikelart es sich handelt.
Musikartikel
Film
Erklären Sie das Konzept der Polymorphie sowie den Zusammenhang zwischen Variablentyp und Objektinstanz bei Methodenaufrufen.
Polymorphie ("Vielgestalt") bezeichnet die Tatsache, dass eine Variable, die vom Typ einer bestimmten (Ober-)Klasse deklariert ist, zur Laufzeit auch Instanzen beliebiger Unterklassen annehmen kann, sofern diese über eine Vererbungsbeziehung verbunden sind. Dabei entscheidet der deklarierte Typ der Variable, welche Methoden überhaupt aufgerufen werden dürfen, während die tatsächlich zugewiesene Instanz zur Laufzeit bestimmt, welche konkrete (ggf. überschriebene) Implementierung dieser Methode ausgeführt wird. Dadurch lassen sich Objekte unterschiedlicher Unterklassen einheitlich über die Oberklasse ansprechen, ohne die jeweilige konkrete Unterklasse zu kennen – es zählt nur, dass die benötigte Funktionalität implementiert ist. Der instanceof-Operator erlaubt zwar einen expliziten Test auf die konkrete Klassenzugehörigkeit einer Instanz, hebt dabei aber die eigentlichen Vorteile der Polymorphie auf, da der Code dann wieder von der konkreten Unterklasse abhängig wird.
Zuletzt geändertvor 17 Tagen