Polymorphismus

Polymorphism

Informatik Klasse 10 15 Aufgaben
PolymorphismusVererbungOOPMethoden ĂĽberschreibenKerncurriculum

Überschreibt eine Unterklasse eine Methode der Oberklasse, so führt ein Aufruf über eine Oberklassen-Referenz zur Laufzeit die Methode des TATSÄCHLICHEN Objekts aus — dynamische Bindung. Die Kernfrage lautet damit immer „Was ist das Objekt wirklich?", nicht „Wie ist die Variable deklariert?"; genau diese Verwechslung ist die dokumentierte Hürde. Ist sie überwunden, lassen sich heterogene Sammlungen (Tier/Hund/Katze) einheitlich behandeln, obwohl jedes Objekt seine eigene Methodenfassung mitbringt.

Leicht
Multiple Choice #1 20s â–¶ Testen

Instrument[] band = {new Gitarre(), new Trommel()}; for (Instrument i : band) i.spielen(); – Instrument gibt „Ton“ aus, Gitarre „Schrumm“, Trommel „Bumm“. Was erscheint?

  • â—‹ „Ton“ „Ton“
  • â—Ź „Schrumm“ „Bumm“
  • â—‹ eine Fehlermeldung
Polymorphismus: Objekte verschiedener Unterklassen reagieren auf denselben Methodenaufruf unterschiedlich. Zur Laufzeit wird die überschriebene Methode des tatsächlichen Objekts ausgeführt – nicht die der Oberklasse. Ein Array vom Typ der Oberklasse darf Objekte der Unterklassen enthalten.
LĂĽckentext #2 20s â–¶ Testen

Wenn eine Unterklasse eine Methode der Oberklasse mit einer eigenen Implementierung versieht, nennt man das ___ der Methode.

âś“ Antwort: Ăśberschreiben
Methoden-Überschreiben (Override): Die Unterklasse definiert eine Methode mit gleichem Namen und gleicher Signatur wie die Oberklasse, aber mit anderem Verhalten. Zur Laufzeit wird die Methode der tatsächlichen Klasse aufgerufen.
Wahr / Falsch #3 15s â–¶ Testen

Bei der Vererbung erbt eine Unterklasse alle Attribute und Methoden der Oberklasse.

âś“ Wahr
Richtig. Die Unterklasse (Subklasse) erbt Attribute und Methoden der Oberklasse (Superklasse). Sie kann eigene hinzufĂĽgen oder geerbte Methoden ĂĽberschreiben. Beispiel: Sportvereinsmitglied erbt von Mitglied.
LĂĽckentext #4 15s â–¶ Testen

Das SchlĂĽsselwort '___ ' in Java zeigt an, dass eine Klasse von einer anderen Klasse erbt.

âś“ Antwort: extends
Syntax: class Hund extends Tier { ... }. Hund erbt alle Attribute und Methoden von Tier und kann eigene hinzufĂĽgen oder Methoden ĂĽberschreiben.
Multiple Choice #5 20s â–¶ Testen

Welcher Vorteil hat Vererbung in der Softwareentwicklung?

  • â—‹ Programme werden langsamer
  • â—Ź Code-Wiederverwendung: Gemeinsame Funktionalität wird einmal in der Oberklasse definiert und von allen Unterklassen geerbt
  • â—‹ Mehr Speicherverbrauch
  • â—‹ Weniger Klassen
Vererbung vermeidet Codeduplizierung: Attribute und Methoden, die für alle Unterklassen gelten, stehen einmal in der Oberklasse. Änderungen müssen nur an einer Stelle vorgenommen werden.
Wahr / Falsch #6 15s â–¶ Testen

Polymorphismus macht Programme flexibler und leichter erweiterbar.

âś“ Wahr
Richtig. Neue Unterklassen können hinzugefügt werden, ohne bestehenden Code zu ändern. Beispiel: Eine neue Sparte 'Handball' im Sportverein — einfach eine neue Unterklasse erstellen und berechneBeitrag() implementieren.
Mittel
Multiple Choice #1 25s â–¶ Testen

Was ist eine 'Generalisierungshierarchie'?

  • â—‹ Eine Liste von Befehlen
  • â—Ź Eine Ordnung von Klassen, bei der allgemeine Oberklassen und spezialisierte Unterklassen in einer Baumstruktur angeordnet sind
  • â—‹ Ein Array von Objekten
  • â—‹ Eine Datenbank-Tabelle
Beispiel: Oberklasse 'Tier' → Unterklassen 'Hund', 'Katze', 'Fisch'. Oder: 'Mitglied' → 'Schwimmer', 'Tennisspieler'. Gemeinsame Eigenschaften stehen in der Oberklasse, spezielle in den Unterklassen.
Multiple Choice #2 30s â–¶ Testen

Ein Sportverein hat verschiedene Sparten (Tennis, Schwimmen, Fußball) mit unterschiedlichen Beiträgen. Wie lässt sich dies mit Polymorphismus lösen?

  • â—‹ Jede Sparte bekommt eine eigene Datenbank
  • â—Ź Die Oberklasse 'Mitglied' hat eine Methode berechneBeitrag(), die in jeder Unterklasse (Tennismitglied, Schwimmmitglied) ĂĽberschrieben wird
  • â—‹ Alle Beiträge werden gleich berechnet
  • â—‹ Es wird eine if-else-Kette fĂĽr jede Sparte geschrieben
Polymorphismus vermeidet lange if-else-Ketten: Jede Unterklasse implementiert berechneBeitrag() passend. Bei mitglied.berechneBeitrag() wird automatisch die richtige Methode des tatsächlichen Typs aufgerufen.
Wahr / Falsch #3 20s â–¶ Testen

Dank Polymorphismus kann man ein Array vom Typ der Oberklasse anlegen und darin Objekte verschiedener Unterklassen speichern.

âś“ Wahr
Richtig. Tier[] tiere = new Tier[3]; tiere[0] = new Hund(); tiere[1] = new Katze(); — Das Array enthält verschiedene Unterklassen. Beim Aufruf tiere[i].gibLaut() wird jeweils die spezifische Methode aufgerufen.
Multiple Choice #4 30s â–¶ Testen

Was versteht man unter 'dynamischer Bindung' (late binding)?

  • â—‹ Das Kompilieren zur Laufzeit
  • â—Ź Zur Laufzeit wird entschieden, welche ĂĽberschriebene Methode aufgerufen wird — basierend auf dem tatsächlichen Typ des Objekts, nicht dem deklarierten Typ
  • â—‹ Das VerknĂĽpfen von Bibliotheken
  • â—‹ Die Bindung von Variablen an Werte
Beispiel: Tier t = new Hund(); t.gibLaut(); — Der deklarierte Typ ist Tier, aber zur Laufzeit wird die Methode gibLaut() der Klasse Hund aufgerufen, da das Objekt tatsächlich ein Hund ist.
LĂĽckentext #5 20s â–¶ Testen

Eine Methode, die in der Oberklasse definiert und in einer Unterklasse mit neuem Verhalten versehen wird, muss die gleiche ___ (Name, Parameter, RĂĽckgabetyp) haben.

âś“ Antwort: Signatur
Beim Ăśberschreiben muss die Methode in der Unterklasse exakt die gleiche Signatur haben wie in der Oberklasse. Andernfalls handelt es sich um Ăśberladen (Overloading, verschiedene Parameter), nicht um Ăśberschreiben (Overriding).
Multiple Choice #6 20s â–¶ Testen

Welches Methodenpaar ist eine Ăśberladung (Overload)?

  • â—‹ in Tier: void lautGeben() – in Hund: void lautGeben()
  • â—Ź in Rechner: int add(int a, int b) und double add(double a, double b)
  • â—‹ in Rechner: int add(int a, int b) und int plus(int a, int b)
Ăśberladen: gleicher Methodenname, aber verschiedene Parameter in derselben Klasse. Ăśberschreiben: gleiche Signatur in Ober- und Unterklasse (lautGeben in Tier und Hund). Zwei Methoden mit verschiedenen Namen sind weder ĂĽberladen noch ĂĽberschrieben.
Multiple Choice #7 30s â–¶ Testen

Gegeben: Klasse 'Figur' mit Methode berechneFlaeche(). Unterklassen: Kreis, Rechteck, Dreieck. Was passiert bei: Figur f = new Kreis(5); f.berechneFlaeche()?

  • â—‹ Die Methode von Figur wird aufgerufen
  • â—Ź Die ĂĽberschriebene Methode von Kreis wird aufgerufen (Ergebnis: Ď€ * 5²)
  • â—‹ Ein Fehler tritt auf
  • â—‹ Es wird die Methode von Rechteck aufgerufen
Durch dynamische Bindung wird zur Laufzeit die Methode des tatsächlichen Objekttyps (Kreis) aufgerufen, nicht die des deklarierten Typs (Figur). Das ist der Kern des Polymorphismus.
LĂĽckentext #8 20s â–¶ Testen

In einem UML-Klassendiagramm wird die Vererbungsbeziehung durch einen Pfeil mit einer ___ Spitze (dreieckig, nicht ausgefĂĽllt) dargestellt.

âś“ Antwort: offenen
Im UML-Klassendiagramm zeigt ein Pfeil mit offener (hohler) dreieckiger Spitze von der Unterklasse zur Oberklasse. Assoziationen werden durch einfache Linien dargestellt, oft mit Kardinalitäten.
Multiple Choice #9 25s â–¶ Testen

Warum sollte man Polymorphismus statt langer if-else- oder switch-Ketten verwenden?

  • â—‹ Polymorphismus ist immer schneller
  • â—Ź Polymorphismus macht den Code ĂĽbersichtlicher, wartbarer und erweiterbar — neue Typen erfordern keine Ă„nderung bestehenden Codes
  • â—‹ if-else funktioniert nicht
  • â—‹ Polymorphismus verbraucht weniger Speicher
Mit if-else müsste man für jeden neuen Typ eine Verzweigung hinzufügen. Mit Polymorphismus erstellt man einfach eine neue Unterklasse — der bestehende Code (z. B. Schleifen über ein Figur-Array) funktioniert ohne Änderung.