Wie nennt Java das Konzept, das im UML-Modell "Vererbung"/"Ableitung" heißt?
Erweiterung
Mit welchem Schlüsselwort wird Vererbung in Java realisiert?
extends
Wie "erweitert" eine Unterklasse eine Oberklasse?
Indem sie neue Attribute und Methoden definiert bzw. bestehende modifiziert.
Von welcher Klasse geht die Vererbungsbeziehung in Java aus, analog zu welcher Notation in UML?
Von der abgeleiteten Klasse (Unterklasse) aus – analog zur Richtung des Assoziationspfeils im UML-Klassendiagramm.
Wo genau wird in Java angegeben, von welcher Oberklasse eine Klasse ableitet?
In der Klassendeklaration der Unterklasse (z. B. class Buch extends Artikel {}).
class Buch extends Artikel {}
Was erbt eine Unterklasse grundsätzlich von ihrer Oberklasse?
Alle Attribute und Methoden
Welche Ausnahme gibt es beim Erben von Attributen/Methoden?
Als private deklarierte Attribute und Methoden der Oberklasse sind in der Unterklasse nicht verfügbar.
private
Behalten geerbte Attribute/Methoden ihre ursprüngliche Sichtbarkeit?
Ja, z. B. bleiben als public deklarierte Elemente auch in der Unterklasse public.
public
Woher erhalten geerbte Attribute eines Objekts ihre Werte, und woher stammt die Implementierung beim Aufruf geerbter Methoden?
Die Werte werden wie bei normalen Instanzattributen gesetzt; beim Aufrufen geerbter Methoden wird die Implementierung aus der Oberklasse verwendet (sofern nicht überschrieben).
Wie können geerbte Attribute und Methoden nach dem Instanziieren eines Unterklassen-Objekts verwendet werden?
Wie normale Instanzattribute und -methoden der Unterklasse selbst.
Was ist Zuweisungskompatibilität?
Die Möglichkeit, einer Variable vom Typ einer Oberklasse auch ein Objekt einer Unterklasse zuzuweisen.
Warum funktioniert Artikel a = new Buch();, aber nicht Buch b = new Artikel();?
Weil jedes Buch ein Artikel ist (Buch erbt alle Eigenschaften von Artikel und kann daher als Artikel behandelt werden), aber nicht jeder Artikel ein Buch ist (ein Artikel-Objekt besitzt nicht die zusätzlichen, nur in Buch definierten Attribute wie z. B. Autor).
Wovon hängt ab, welche Attribute und Methoden auf einer Variablen aufgerufen werden können?
Vom deklarierten Typ der Variable, nicht vom tatsächlichen Typ des zugewiesenen Objekts.
Gegeben: Artikel artikel = new Buch();. Kann artikel.setAutor(...) aufgerufen werden?
Nein, der Compiler meldet einen Fehler, da setAutor in der Klasse Artikel nicht definiert ist – obwohl das tatsächliche Objekt ein Buch ist.
Wozu wird Zuweisungskompatibilität in großen Softwaresystemen genutzt?
Um eine möglichst lose Kopplung der Klassen untereinander zu gewährleisten – Code kann unabhängig von der konkreten Unterklasse implementiert werden, solange er sich auf die in der Oberklasse deklarierten Funktionalitäten stützt.
Warum muss eine Schleife, die den Hersteller aller Artikel in einer Liste ausliest, nicht angepasst werden, wenn später eine neue Unterklasse "Spielzeug" von Artikel hinzukommt?
Weil die Schleife nur auf die in der Oberklasse "Artikel" definierte Funktionalität (z. B. getHersteller()) zugreift. Da "Spielzeug" ebenfalls von Artikel erbt und somit ebenfalls getHersteller() besitzt, funktioniert die Schleife unverändert weiter – unabhängig davon, welche konkreten Unterklassen tatsächlich in der Liste vorkommen.
Was bedeutet "Überschreiben" einer Methode?
Das erneute Implementieren einer bereits geerbten Methode in der Unterklasse.
Warum reicht die geerbte Methode getBeschreibung() der Oberklasse "Artikel" für die Unterklassen oft nicht aus?
Weil sie eine unvollständige Beschreibung liefert – z. B. fehlt bei Büchern der Autor, bei Filmen der Regisseur, da "Artikel" nichts von den zusätzlichen Attributen der Unterklassen weiß
Wie überschreibt man in Java eine geerbte Methode?
Indem man in der Unterklasse eine Methode mit derselben Signatur erstellt und einen neuen Methodenrumpf implementiert.
Wenn eine Instanz der Unterklasse erzeugt wird und auf eine überschriebene Methode zugegriffen wird – welche Implementierung wird ausgeführt?
Die überschriebene Variante aus der Unterklasse; die Instanz (der tatsächliche Objekttyp) bestimmt, welche Implementierung ausgeführt wird.
Was passiert mit der ursprünglichen Implementierung der Oberklasse, wenn eine Methode überschrieben wird?
Sie wird von der neuen Implementierung in der Unterklasse überlagert (ist über den normalen Methodenaufruf nicht mehr direkt erreichbar).
Mit welchem Schlüsselwort kann trotzdem auf die Implementierung der Oberklasse zugegriffen werden?
super
Warum ist mit super in Java immer eindeutig definiert, welche Klasse gemeint ist?
Weil jede Unterklasse in Java nur eine einzige Oberklasse haben kann (keine Mehrfachvererbung) – super verweist also immer eindeutig auf genau diese eine Oberklasse.
Wie viele Ebenen in der Vererbungshierarchie geht super nach oben?
Genau eine Ebene.
Wie nutzt man super, um eine Methode der Oberklasse zu erweitern statt komplett neu zu implementieren?
Man ruft zuerst mittels super die bereits vorhandene Implementierung der Oberklasse auf und ergänzt danach zusätzliche Anweisungen, die für die Unterklasse wichtig sind (z. B. das Ergebnis von super.getBeschreibung() um den Autor ergänzen).
super.getBeschreibung()
Warum ist es wichtig zu verstehen, dass der deklarierte Typ einer Variable (nicht das tatsächliche Objekt) bestimmt, welche Methoden aufgerufen werden können?
Weil ein und dasselbe Objekt (z. B. ein Buch-Objekt) je nach Typ der Variable, der es zugewiesen wurde, unterschiedlich "eingeschränkt" behandelt wird. Ist die Variable vom Typ Artikel deklariert, kann man auf ihr nur Artikel-Methoden aufrufen, selbst wenn im Hintergrund tatsächlich ein Buch mit zusätzlichen Methoden wie setAutor() gespeichert ist. Das ermöglicht lose Kopplung, erfordert aber, bei Bedarf explizit mit dem passenden Typ zu arbeiten.
Artikel
setAutor()
Was ist der Unterschied zwischen "Überschreiben" (Overriding) und einfachem "Erben" einer Methode?
Beim einfachen Erben übernimmt die Unterklasse die Methode der Oberklasse unverändert – ruft man die Methode auf einem Unterklassen-Objekt auf, wird exakt die Implementierung der Oberklasse ausgeführt. Beim Überschreiben definiert die Unterklasse eine eigene Methode mit derselben Signatur, die die geerbte Implementierung ersetzt – ruft man die Methode dann auf, wird die neue Implementierung aus der Unterklasse ausgeführt, nicht die der Oberklasse.
Warum ist super nützlich, statt eine überschriebene Methode komplett neu zu schreiben?
Weil man so die bereits vorhandene, funktionierende Logik der Oberklasse wiederverwenden kann, statt sie zu duplizieren. Man ruft die Oberklassen-Implementierung über super auf und ergänzt nur die zusätzliche, unterklassenspezifische Logik – das vermeidet Redundanz und reduziert Fehlerquellen, ganz im Sinne des Vererbungsprinzips.
Erkläre am Beispiel der Klasse "Buch" (abgeleitet von "Artikel"), wie Erweiterung, Zuweisungskompatibilität und Überschreiben zusammenspielen.
Die Klasse "Buch" wird mit class Buch extends Artikel von "Artikel" abgeleitet und definiert zusätzlich das Attribut autor mit passenden Getter-/Setter-Methoden (Erweiterung). Ein erzeugtes Buch-Objekt kann sowohl seine geerbten Attribute (Hersteller, Titel, Artikelnummer) als auch das neue Attribut Autor über entsprechende Methoden setzen. Da jedes Buch ein Artikel ist, kann eine Variable vom Typ Artikel auch auf ein Buch-Objekt zeigen (Zuweisungskompatibilität) – umgekehrt jedoch nicht. Damit getBeschreibung() bei einem Buch auch den Autor mit ausgibt, überschreibt "Buch" diese von "Artikel" geerbte Methode mit einer eigenen Implementierung (Überschreiben), die z. B. mittels super.getBeschreibung() die Basisbeschreibung von Artikel abruft und um den Autor ergänzt.
class Buch extends Artikel
autor
getBeschreibung()
Erklären Sie, wie Vererbung in Java mittels extends umgesetzt wird, was Zuweisungskompatibilität bedeutet und wie das Überschreiben von Methoden mit super funktioniert.
In Java wird Vererbung (im Skript "Erweiterung" genannt) mit dem Schlüsselwort extends in der Klassendeklaration der Unterklasse ausgedrückt. Die Unterklasse erbt alle Attribute und Methoden der Oberklasse außer den als privatedeklarierten; die übrigen behalten ihre ursprüngliche Sichtbarkeit. Durch Zuweisungskompatibilität kann einer Variable vom Typ der Oberklasse auch ein Objekt der Unterklasse zugewiesen werden (jedes Buch ist ein Artikel), nicht aber umgekehrt; dabei bestimmt stets der deklarierte Typ der Variable, welche Methoden aufgerufen werden dürfen – unabhängig vom tatsächlichen Objekttyp. Reicht die geerbte Implementierung einer Methode für die Unterklasse fachlich nicht aus, kann sie durch eine gleichnamige Methode mit identischer Signatur überschrieben werden; bei einem Aufruf auf einem Unterklassen-Objekt wird dann die überschriebene Variante ausgeführt. Mit dem Schlüsselwort super kann innerhalb der überschriebenen Methode weiterhin auf die ursprüngliche Implementierung der Oberklasse zugegriffen werden, um sie zu erweitern statt sie komplett zu duplizieren.
Last changed16 days ago