Zum Inhalt springen

Informatik · Klasse 11–13 · aktualisiert

Polymorphie in Java: Überladen und Überschreiben

Du lernst, wie Java Methoden auswählt und wann ein Objekt einer abgeleiteten Klasse ein Objekt seiner Basisklasse ersetzen darf.

0 von 9 Aufgaben gelöst

Polymorphie in Java: Überladen und Überschreiben

Kurz gesagt

Beim Überladen unterscheiden sich gleichnamige Methoden, also ausführbare Aktionen, durch Anzahl oder Typen ihrer Eingaben. Beim Überschreiben gibt eine abgeleitete Klasse einer geerbten Methode eine eigene Ausführung; gemeint sind hier Methoden, die du an einem Objekt aufrufst.

Java ist eine Programmiersprache, in der Klassen Baupläne für Objekte beschreiben. Ein Objekt ist ein Exemplar einer Klasse; eine Methode beschreibt eine ausführbare Aktion. Alle Beispiele sind erfunden; ein Modell ist hier eine vereinfachte Beschreibung ausgewählter Eigenschaften. Die Java-Ausschnitte brauchen den jeweils beschriebenen Programmrahmen.

Deine Lernziele

Hake ab, was du schon kannst. Löst du alle Aufgaben eines Abschnitts, hakt Termi das Ziel für dich ab.

4 Abschnitte

Polymorphie bedeutet Vielgestaltigkeit. Beim Programmieren können etwa gleichnamige Methoden unterschiedliche Ausführungen haben. Dafür musst du Überladen und Überschreiben unterscheiden.

Ein Parameter ist ein benannter Platzhalter für eine Eingabe. Sein Typ legt fest, welche Art von Wert übergeben werden darf. In unseren Java-Beispielen steht int für ganze Zahlen und String für eine Zeichenkette, also eine Folge von Zeichen. Der Rückgabetyp beschreibt das Ergebnis einer Methode. void bedeutet, dass die Methode keinen Wert zurückgibt. Ein Methodenkopf nennt unter anderem Rückgabetyp, Methodennamen und Parameter. Der Methodenkörper ist der Teil zwischen den geschweiften Klammern { und }; dort stehen die Anweisungen. Bei einem Methodenaufruf stehen die übergebenen Werte in runden Klammern hinter dem Methodennamen.

Beim Überladen gibt es gleichnamige Methoden mit unterschiedlichen Parameterlisten. Entscheidend sind Anzahl und Typen der Parameter, einschließlich ihrer Reihenfolge. Bei den hier verwendeten einfachen Java-Methoden bilden der Methodenname und die geordnete Liste der Parametertypen die Methodensignatur, kurz Signatur. Andere Parameternamen reichen nicht. Auch ein anderer Rückgabetyp allein erlaubt keine zusätzliche Methode mit derselben Signatur.

Eine abgeleitete Klasse übernimmt Eigenschaften und Methoden einer Basisklasse. Das heißt Vererbung; Basisklasse und Oberklasse meinen hier dasselbe. Eine abgeleitete Klasse heißt auch Unterklasse. Eine Instanzmethode wird an einem einzelnen Objekt aufgerufen. Beim Überschreiben gibt die abgeleitete Klasse einer geerbten Instanzmethode eine eigene Ausführung mit gleichem Namen und gleichen Parametertypen. In unseren Beispielen stimmen außerdem Rückgabetyp und Sichtbarkeit überein. Die Sichtbarkeit legt fest, von wo eine Methode aufgerufen werden darf: public bedeutet öffentlich zugänglich.

Definition

Methodensignatur

Bei den hier verwendeten einfachen Java-Methoden besteht die Signatur aus dem Methodennamen und der geordneten Liste der Parametertypen. Parameternamen und Rückgabetyp gehören nicht dazu.

Beispiel: Zwei Varianten eines Markierers

  1. 1In der Klasse Markierer stehen die Methodenköpfe public void markiere(int platz) und public void markiere(String wort). Die Methodenkörper sind hier weggelassen.
  2. 2Die Methoden sind überladen: markiere(6) passt zur Variante mit int, markiere("frei") zur Variante mit String.
  3. 3FarbMarkierer ist von Markierer abgeleitet. Setzt FarbMarkierer die geerbte Methode public void markiere(int platz) selbst um, ist das Überschreiben.
  4. 4Würde man in Markierer zusätzlich int markiere(int platz) deklarieren, wäre das keine gültige Überladung: Der Rückgabetyp allein unterscheidet die Signaturen nicht.

Merke: Überladen unterscheidet Parameterlisten. Überschreiben verändert die Ausführung einer geerbten Instanzmethode. Mehr Überladungen machen ein Programm nicht von selbst verständlicher.

Teste dich

LeichtIn einer Klasse steht bereits public void ordne(int nummer). Welcher zusätzliche Methodenkopf beschreibt eine gültige Überladung in derselben Klasse?

Alles auf einen Blick

Polymorphie

  • Überladen

    Gleichnamige Methoden unterscheiden sich durch ihre Parameterlisten, nicht allein durch den Rückgabetyp.

  • Überschreiben

    Eine abgeleitete Klasse gibt einer geerbten Instanzmethode eine eigene Ausführung.

  • Typen

    Der deklarierte Referenztyp und der Instanztyp des tatsächlichen Objekts können verschieden sein.

  • Dynamische Bindung

    Bei überschriebenen Instanzmethoden wird die Ausführung zur Laufzeit anhand des Objekts ausgewählt.

  • Ersetzbarkeit

    Unterklassen müssen die Zusagen der Basisklasse erhalten; Vorbedingungen dürfen schwächer, Nachbedingungen stärker werden.

Musteraufgabe · Schritt für Schritt

Die Ausgabe eines Wegweisers bestimmen

  1. 1Gegeben sind die Basisklasse Wegweiser und die abgeleitete Klasse Umleitung. Wegweiser besitzt die öffentliche Instanzmethode zeige() mit der Ausgabe „geradeaus“. Umleitung überschreibt sie mit der Ausgabe „links“.
  2. 2Die Java-Ausschnitte Wegweiser weg = new Umleitung(); und weg.zeige(); werden nacheinander in einer Methode ausgeführt. Gesucht ist die Ausgabe.
  3. 3Der Referenztyp ist Wegweiser. Weil diese Klasse zeige() besitzt, ist der Methodenaufruf erlaubt.
  4. 4new Umleitung() erzeugt ein Objekt mit dem Instanztyp Umleitung. Die Zuweisung verändert diesen Instanztyp nicht.
  5. 5Durch dynamische Bindung wird die überschriebene Methode von Umleitung ausgeführt. Die Ausgabe lautet „links“.

Fehler finden

Prüfe die Ausgabe einer Eilmeldung In einer Zeile steckt ein Fehler. Tippe sie an.

Lückentext

Wähl in jeder Lücke das passende Wort und prüf dann deine Antworten.

In derselben Klasse stehen die Methodenköpfe void sende(int zahl) und void sende(String text). Diese Methoden sind . Im Modell erbt Tanne von Baum. Nach Baum b = new Tanne(); ist der Instanztyp . Eine Basisklasse erlaubt eine Abfrage ohne Anmeldung. Verlangt die Unterklasse dafür eine Anmeldung, wird die Vorbedingung .

Karteikasten

Erst selbst überlegen, dann umdrehen.

Übung mit Feedback

Abschluss-Check: Polymorphie

LeichtSensor besitzt public void pruefe(). Die abgeleitete Klasse Temperatursensor setzt diese geerbte Methode mit demselben Methodenkopf selbst um. Welcher Vorgang liegt vor?
MittelSpender besitzt die öffentliche Instanzmethode gib() mit der Ausgabe „Portion“. Saftspender erbt von Spender und überschreibt gib() nicht. Was passiert bei Spender s = new Saftspender(); s.gib();?
SchwerEin Verhaltensmodell legt fest: Depot nimmt jedes Paket bis 5 Kilogramm an und bewahrt seinen Inhalt unverändert. Leichtdepot nimmt Pakete bis 3 Kilogramm an, Grossdepot bis 8 Kilogramm. Beide bewahren den Inhalt unverändert; weitere Bedingungen gibt es nicht. Welche Bewertung folgt aus den beschriebenen Zusagen?

Weiterlesen in Informatik