Antwort:
Ja.
Abstrakte Methoden überschreiben
Eine abstrakte Klasse wird üblicherweise abstrakte Methoden enthalten.
Eine abstrakte Methodendefinition besteht aus:
- einem optionalen Zugriffsmodifizierer (z.B.
public) - dem reservierten Wort
abstract - dem Typ des Rückgabewerts oder
void - einer Methodensignatur
- einem Semikolon.
Der Signatur folgen weder geschweifte Klammern noch ein Methodenkörper.
Hier ist die abstrakte Klasse
AbstrakteSuperklasse mit der abstrakten Methode berechne():
abstract class AbstrakteSuperklasse
{
public abstract int berechne( int x, String s );
}
Wenn eine Klasse eine oder mehrere abstrakte Methoden hat,
muss sie als abstract deklariert werden.
Eine abstrakte Klasse kann Methoden haben, die nicht abstrakt sind
(die übliche Art von Methoden). Diese Methoden werden von den Subklassen in der üblichen Weise geerbt.
Eine nicht-abstrakte Subklasse einer abstrakten Superklasse
muss jede der abstrakten Methoden ihrer Superklasse überschreiben.
- Eine nicht-abstrakte Subklasse muss jede der von ihrer Superklasse geerbten abstrakten Methoden überschreiben,
indem sie eine Methode mit der gleichen Signatur und dem
gleichen Rückgabewert definiert.- Objekte der Subklasse werden diese Methode enthalten.
- Eine Subklasse kann zusätzliche Methoden
mit anderen Signaturen als den der Superklasse definieren.- Objekte der Subklasse werden diese Methoden zusätzlich zu der ersten
enthalten.
- Objekte der Subklasse werden diese Methoden zusätzlich zu der ersten
- Es ist ein Fehler, wenn eine Subklasse eine Methode mit der gleichen Signatur
wie die der Superklasse, aber mit einem unterschiedlichen
Rückgabewert definiert.
Diese Regeln sind nicht so schlimm wie sie scheinen.
Nachdem Ihr eine Weile mit abstrakten Klassen gearbeitet habt, werden Euch die Regeln klar sein.
Hier ist eine Subklasse von AbstrakteSuperklasse:
class Subklasse extends AbstrakteSuperklasse { public int berechne( int x, String s ) { . . . } }
Die Methode berechne() der Subklasse überschreibt korrekt die abstrakte Methode der Superklasse.
FRAGE 3:
Überschreibt das Folgende korrekt die abstrakte Methode der Superklasse?
class Subklasse extends AbstrakteSuperklasse
{
public double berechne( int x, String s )
{ . . . }
}