zur vorherigen Seite   zum Inhaltsverzeichnis   zur nächsten Seite

Antwort:

Alle.

Abstrakte Methoden

In diesem Beispiel hat jede Kartenklasse ihre eigene Version der gruss() Methode, aber jede ist anders implementiert. Es ist sinnvoll eine abstrakte gruss() Methode in der Superklasse zu haben.

Das besagt, dass jede Subklasse das "Konzept" gruss() erbt, aber die jeweilige Implementation unterschiedlich ist. Hier ist die Klassendefinition der abstrakten Klasse Karte:

abstract class Karte
{
  String empfaenger;             // Name des Empfängers
  public abstract void gruss();  // abstrakte gruss() Methode
}

Das ist die vollständige Definition dieser abstrakten Klasse. Beachtet die abstrakte Methode. Abstrakte Klassen können (aber müssen nicht) abstrakte Methoden enthalten. Ebenso kann eine abstrakte Klasse nicht-abstrakte Methoden enthalten, die von den Subklassen geerbt werden.

Eine abstrakte Methode hat keinen Körper. (Sie besitzt keine Anweisungen.) Sie deklariert Zugriffsmodifizierer, Rückgabetyp und Methodensignatur gefolgt von einem Semikolon.

Eine nicht-abstrakte Subklasse erbt die abstrakte Methode und muss eine nicht-abstrakte Methode definieren, die mit der abstrakten Methode übereinstimmt.

Eine abstrakte Subklasse einer abstrakten Superklasse ist nicht verpflichtet die geerbten abstrakten Methoden zu implementieren. Das heißt, dass es mehrere Schritte geben kann, von einer abstrakten Basisklasse bis zu einer Subklasse, die vollständig nicht-abstrakt ist.

Da in der Klasse Karte kein Konstruktor definiert ist, wird automatisch der argumentenlose Standardkonstruktor vom Compiler zur Verfügung gestellt. Aber, dieser Konstruktor kann nicht direkt verwendet werden, da kein Karte-Objekt konstruiert werden kann.

FRAGE 4:

Fühlt Ihr Euch in diesem Moment etwas abstrakt?