Was ist eine abstrakte Klasse?
Eine Klasse, von der keine Instanzen erzeugt werden können; sie fasst Gemeinsamkeiten zusammen und gibt eine Schnittstelle vor, die von ihren abgeleiteten Klassen erfüllt werden muss.
Warum ergibt es wenig Sinn, eine Instanz der Klasse "Artikel" zu erzeugen?
Weil ein Artikel-Objekt zwar Titel, Hersteller und Artikelnummer hätte, aber nicht festgelegt wäre, um welche Art von Artikel es sich handelt – ohne diese Information lässt sich der Artikel im System nicht sinnvoll verwenden (z. B. für die Darstellung der Artikelseite).
Wozu dient die abstrakte Klasse "Artikel" dann primär?
Zur Modellierung und Strukturierung des Systems – sie ermöglicht, die verschiedenen Artikelarten auf konsistente Art und Weise zu verwenden, ohne selbst konkret instanziiert zu werden.
Wie werden abstrakte Klassen in UML gekennzeichnet (2 Varianten)?
Mit dem Wort abstract in geschweiften Klammern, oder alternativ durch kursive Schreibweise des Klassennamens
abstract
Mit welchem Schlüsselwort werden abstrakte Klassen in Java implementiert?
Was passiert, wenn versucht wird, eine Instanz einer als abstract gekennzeichneten Klasse zu erzeugen?
Der Compiler meldet einen Fehler.
Können abstrakte Klassen trotzdem Attribute mit Werten und implementierte Methoden besitzen?
Ja, ansonsten sind sie wie normale Klassen aufgebaut; abgeleitete Klassen erben diese Attribute und Methoden wie gehabt.
Was ist eine abstrakte Methode?
Eine Methode, die eine Signatur, aber keinen Methodenrumpf (keine Implementierung) besitzt.
Was gibt eine abstrakte Methode vor?
Welche Funktionalität in Unterklassen implementiert werden muss.
Was folgt daraus, dass eine Klasse mindestens eine abstrakte Methode definiert?
Die Klasse selbst muss ebenfalls als abstract gekennzeichnet werden, da sie nicht vollständig ist.
Wie muss eine abstrakte Methode in einer konkreten Unterklasse behandelt werden?
Sie muss zwingend durch Überschreiben implementiert werden.
Wird das Implementieren einer geerbten abstrakten Methode vom Compiler erzwungen?
Ja
Welche einzige Möglichkeit gibt es, eine abstrakte Methode nicht in einer direkten Unterklasse zu implementieren, und welche Konsequenz hat das?
Die Methode dort erneut als abstract kennzeichnen; Konsequenz: Diese Unterklasse wird dadurch selbst zu einer abstrakten Klasse, und die Implementierungsverantwortung wird an weitere Unterklassen delegiert.
Ist es erlaubt, eine Variable vom Typ einer abstrakten Klasse zu deklarieren?
Ja, das ist erlaubt.
Was muss der zugewiesene Wert einer Variable vom Typ einer abstrakten Klasse zwingend sein?
Ein Objekt einer abgeleiteten (konkreten) Klasse, da von der abstrakten Klasse selbst keine Objekte erzeugt werden können.
Warum ist Artikel a = new Buch(); erlaubt, obwohl Artikel abstrakt ist?
Artikel a = new Buch();
Artikel
Weil durch die Vererbungsbeziehung zwischen "Buch" und "Artikel" Zuweisungskompatibilität besteht – new Buch()erzeugt kein Artikel-, sondern ein Buch-Objekt, das der Variable vom Typ Artikel zugewiesen werden darf.
new Buch()
Warum verhindert eine abstrakte Klasse gezielt die Instanziierung, obwohl sie sonst wie eine normale Klasse Attribute und Methoden besitzen kann?
Die abstrakte Klasse dient nur der Modellierung von Gemeinsamkeiten und einer einheitlichen Schnittstelle – ein Objekt von ihr wäre fachlich unvollständig oder sinnlos, weil essentielle Informationen (z. B. welche konkrete Artikelart es ist) fehlen. Indem man die Instanziierung technisch verbietet, erzwingt man, dass immer nur sinnvolle, vollständig spezialisierte Objekte (der Unterklassen) erzeugt werden.
Warum ist eine abstrakte Methode das passende Mittel, um Herrn Koch zu garantieren, dass jede Artikel-Unterklasse eine eigene "Twitter-Beschreibung" implementiert?
Eine normale (nicht-abstrakte) Methode in der Oberklasse könnte einfach ungenutzt geerbt werden, ohne dass eine Unterklasse gezwungen wäre, sie zu überschreiben. Eine abstrakte Methode hat dagegen keinen Methodenrumpf – die Klasse ist damit unvollständig, solange keine konkrete Unterklasse die Methode implementiert. Der Compiler erzwingt dadurch technisch, dass jede konkrete Unterklasse eine eigene, sinnvolle Implementierung liefern muss.
Was passiert konzeptionell, wenn eine Unterklasse eine geerbte abstrakte Methode selbst wieder als abstract kennzeichnet, statt sie zu implementieren?
Die Verpflichtung zur Implementierung wird nicht aufgehoben, sondern nur eine Ebene weiter nach unten in der Vererbungshierarchie verschoben. Die Unterklasse wird dadurch selbst abstrakt (kann also ebenfalls nicht instanziiert werden), und erst eine weitere, konkrete Unterklasse muss die Methode letztlich implementieren.
Erkläre am Beispiel von Herrn Kochs Twitter-Feature, wie abstrakte Klasse und abstrakte Methode zusammen eingesetzt werden.
Frau Lange möchte, dass Kunden einen kompakten Artikelwunsch twittern können. Herr Koch erweitert die Klasse "Artikel" um die Methode getTwitterBeschreibung(), markiert diese als abstract (kein Methodenrumpf) und muss deshalb auch "Artikel" selbst als abstract kennzeichnen. Dadurch kann kein Artikel-Objekt mehr direkt erzeugt werden (sinnvoll, da eine generische "Twitter-Beschreibung" ohne konkrete Artikelart keinen Sinn ergibt), und jede konkrete Unterklasse wie "Buch" muss getTwitterBeschreibung() zwingend selbst implementieren – der Compiler erzwingt das automatisch.
getTwitterBeschreibung()
Erklären Sie den Zweck abstrakter Klassen und abstrakter Methoden in Java und wie sie zusammenhängen.
Eine abstrakte Klasse ist eine Klasse, von der keine Instanzen erzeugt werden können – sie fasst Gemeinsamkeiten von Unterklassen zusammen und gibt eine Schnittstelle vor, ohne selbst fachlich vollständig sinnvoll instanziierbar zu sein (z. B. ein "Artikel" ohne konkrete Artikelart). Sie wird in Java mit dem Schlüsselwort abstract gekennzeichnet; Instanziierungsversuche werden vom Compiler mit einem Fehler abgelehnt. Eine abstrakte Methode besitzt nur eine Signatur, aber keinen Methodenrumpf, und schreibt damit vor, welche Funktionalität konkrete Unterklassen zwingend implementieren müssen. Definiert eine Klasse mindestens eine abstrakte Methode, muss auch die Klasse selbst als abstrakt gekennzeichnet werden. Konkrete Unterklassen müssen geerbte abstrakte Methoden durch Überschreiben implementieren – tun sie das nicht, werden sie selbst zu abstrakten Klassen. Variablen dürfen vom Typ einer abstrakten Klasse deklariert werden, ihnen muss aber stets ein Objekt einer konkreten (nicht abstrakten) Unterklasse zugewiesen werden.
Last changed2 days ago