Feiertag
Dieser Stoff bedarf der Überlegung und der Übung. Es hat Jahre gedauert bis sich Informatiker über dieses Konzept geeinigt haben.
Abstrakte Klassen werden verwendet, um das "Konzept" von Etwas zu organisieren, das über verschiedene Versionen von Subklassen verfügt. Die abstrakte Klasse kann abstrakte und nicht-abstrakte Methoden enthalten.
Hier ist eine Klassendefinition für die Klasse Feiertag
.
Es ist eine nicht-abstrakte Subklasse einer abstrakten Superklasse:
class Feiertag extends Karte { public Feiertag( String e ) { empfaenger = e; } public void gruss() { System.out.println("Dear " + empfaenger + ",\n"); System.out.println("frohe Feiertage!\n\n"); } }
Die Klasse Feiertag
ist keine abstrakte Klasse.
Von ihr können Objekte instanziiert werden.
Ihr Konstruktor ruft implizit den argumentenlosen
Konstruktor in ihrer Superklasse Karte
auf,
der wiederum den Konstruktor in Object
aufruft.
Obwohl sie eine abstrakte Superklasse haben, sind
Feiertag
-Objekte genauso Objekte wie all die anderen.
Feiertag
erbt die abstrakte Methode gruss()
von ihrer Superklasse.Feiertag
muss eine gruss()
Methode definieren, die einen Methodenkörper enthält (Anweisungen zwischen geschweiften Klammern).gruss()
muss mit der in der Superklasse gegebenen Signatur übereinstimmen.Feiertag
keine gruss()
Methode definiert, dann müsste Feiertag
als eine abstrakte Klasse deklariert werden.
Wird jede der (nicht abstrakten) Klassen, die von Karte
erbt, eine
gruss()
Methode haben?