Zum Inhalt springen

Informatik · Klasse 10–13 · aktualisiert

Vererbung in Java: Klassen sinnvoll erweitern

Du lernst, wie Java-Klassen andere Klassen erweitern, welche Methode ausgeführt wird und wie austauschbare Objekte Verhalten verändern.

0 von 9 Aufgaben gelöst

Vererbung in Java: Klassen sinnvoll erweitern

Kurz gesagt

Mit Vererbung erweitert eine Java-Klasse eine passende Basisklasse und kann deren Methoden überschreiben. Bei überschriebenen Instanzmethoden entscheidet das tatsächliche Objekt über die Ausführung. Komposition ermöglicht austauschbares Verhalten durch enthaltene Objekte.

Java ist eine Programmiersprache. Eine Klasse beschreibt einen Bauplan für Objekte, also einzelne Exemplare dieses Bauplans. Du untersuchst, wie Klassen gemeinsame Eigenschaften nutzen und wie du veränderbares Verhalten sinnvoll aufteilst.

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

Eine Klasse legt Eigenschaften und Verhalten ihrer Objekte fest. Ein Attribut speichert eine Eigenschaft. Eine Methode beschreibt eine aufrufbare Folge von Anweisungen. Eine Instanzmethode gehört zu einem einzelnen Objekt; eine Instanz ist ein anderes Wort für ein Objekt.

Bei der Vererbung erweitert eine abgeleitete Klasse eine Basisklasse. Sie kann geerbte Methoden weiterverwenden, zusätzliche Eigenschaften erhalten und geeignetes Verhalten verändern. Als Begründung hilft die Beziehung „ist ein“: Jedes Objekt der abgeleiteten Klasse soll auch als Objekt der Basisklasse verwendbar sein und deren vereinbarte Aufgaben erfüllen. Gemeinsame Methoden müssen dann nicht erneut geschrieben werden. Dass zwei Klassen einige ähnliche Eigenschaften haben, reicht als Begründung noch nicht aus.

Welche Bestandteile vererbt werden, hängt von ihren Zugriffsregeln ab. Ein Paket ist eine Gruppe zusammengehörender Java-Klassen. Die Tabelle zeigt die Regeln. Private Daten der Basisklasse können weiterhin zum erzeugten Objekt gehören; die abgeleitete Klasse darf jedoch nicht direkt darauf zugreifen. Sie kann dafür zugängliche Methoden der Basisklasse nutzen. Ein Konstruktor bereitet ein neues Objekt vor. Konstruktoren werden nicht vererbt, können aber aus der abgeleiteten Klasse aufgerufen werden.

Definition

Basisklasse und abgeleitete Klasse

Die Basisklasse liefert den allgemeineren Bauplan. Die abgeleitete Klasse erweitert diesen Bauplan um passendere Eigenschaften oder Verhaltensweisen.

Beispiel: Ein Lieferwagen als Fahrzeug: ausgedachtes Modell

  1. 1Die Klasse Fahrzeug bietet die Methode fahren(). Die leeren Klammern bedeuten hier: Der Aufruf benötigt keine zusätzlichen Werte.
  2. 2Die Klasse Lieferwagen erweitert Fahrzeug und ergänzt das Attribut laderaum.
  3. 3Ein Lieferwagen ist ein Fahrzeug und erfüllt weiterhin dessen vereinbarte Aufgabe fahren(). Deshalb passt die Vererbung.
  4. 4Ein Lager enthält Fahrzeuge, ist aber selbst kein Fahrzeug. Das Enthaltensein begründet keine Vererbung von Fahrzeug.
KennzeichnungVererbung
public: öffentlichWird auch über Paketgrenzen hinweg vererbt.
protected: geschütztWird auch über Paketgrenzen hinweg vererbt.
Keine ZugriffskennzeichnungWird vererbt, wenn beide Klassen im selben Paket liegen.
private: privatWird nicht vererbt; zugängliche Methoden können den Zugriff auf private Daten ermöglichen.

Teste dich

LeichtWelche Aussage trifft auf eine abgeleitete Klasse zu?

Alles auf einen Blick

Vererbung (Programmierung)

  • Beziehung

    Vererbung passt zu einer „ist ein“-Beziehung, bei der die vereinbarten Aufgaben der Basisklasse erhalten bleiben.

  • Zugriff

    Private Bestandteile und Konstruktoren werden nicht vererbt; zugängliche Methoden können private Daten nutzbar machen.

  • Java-Schreibweise

    extends nennt die Basisklasse, super(...) ruft deren passenden Konstruktor auf und @Override lässt eine Überschreibung prüfen.

  • Methodenauswahl

    Bei überschriebenen Instanzmethoden bestimmt das tatsächliche Objekt die ausgeführte Methode.

  • Komposition

    Enthaltene Verhaltensobjekte lassen sich während des Programmlaufs wechseln, wenn ein austauschbarer Verweis vorgesehen ist.

  • Änderungen

    Eine gemeinsame Schnittstelle kann Änderungen begrenzen, garantiert aber keine vollständige Unabhängigkeit.

Musteraufgabe · Schritt für Schritt

Einen Methodenaufruf bei einem Frostsensor verfolgen

  1. 1Ausgedachte Voraussetzung: Sensor besitzt die Instanzmethode String meldung(), die „Messung“ zurückgibt.
  2. 2Frostsensor erbt von Sensor und überschreibt dieselbe Methode mit dem Rückgabewert „Frost“. Beide Klassen haben aufrufbare Konstruktoren ohne Parameter.
  3. 3Der Java-Ausschnitt beginnt mit Sensor s = new Frostsensor();. Der Variablentyp ist Sensor; das tatsächliche Objekt gehört zur Klasse Frostsensor.
  4. 4Danach wird String ergebnis = s.meldung(); ausgeführt. Der Aufruf betrifft eine überschriebene Instanzmethode.
  5. 5Deshalb wird die Ausführung von Frostsensor gewählt. Die Variable ergebnis enthält anschließend die Zeichenfolge „Frost“.
  6. 6Der Ausschnitt speichert einen Rückgabewert. Er enthält keine Anweisung für eine Bildschirmausgabe.

Fehler finden

Prüfe den Aufruf einer Grußmethode 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.

Bei super(4) wird der passende zugängliche Konstruktor der aufgerufen. Bei einer überschriebenen Instanzmethode richtet sich die Auswahl der Ausführung nach dem . Eine Klasse hält einen ausdrücklich austauschbaren Verweis auf ein Verhaltensobjekt. Beim vorgesehenen Wechsel wird .

Karteikasten

Erst selbst überlegen, dann umdrehen.

Übung mit Feedback

Abschluss-Check: Vererbung (Programmierung)

LeichtEin Wecker ist ein Gerät und erfüllt dessen vereinbarte Aufgaben. Die Klasse Wecker ergänzt eine Weckfunktion. Warum passt die Vererbung von Geraet zu Wecker?
MittelEine Lernapp nutzt ein austauschbares Rückmeldeobjekt. Die Ausführungen „Kurz“ und „Ausführlich“ erfüllen dieselbe Schnittstelle. Warum kann der Wechsel ohne Änderung der nutzenden Klasse gelingen?
SchwerAusgedachte Voraussetzung: Anzeige besitzt String text() mit Rückgabewert „Allgemein“. Warnanzeige erbt von Anzeige und überschreibt text() mit Rückgabewert „Stopp“. Beide Konstruktoren ohne Parameter sind aufrufbar. Zuerst stehen Anzeige a = new Warnanzeige(); und a.text();. Danach stehen a = new Anzeige(); und erneut a.text();. Welche Rückgabewerte entstehen in dieser Reihenfolge?

Weiterlesen in Informatik