Die Superklasse Karte
ist eine abstrakte Klasse und
kann deshalb nicht instanziiert werden.
Das folgende können wir nicht tun:
. . . .
public static void main(String[] args)
{
. . . .
Karte postkarte = new Karte() ;
// abstrakte Klassen
// können nicht instanziiert werden
postkarte.gruss() ;
. . . .
}
Da Karte
eine abstrakte Klasse ist,
wird der Compiler das als Syntaxfehler markieren.
Karte
hat einen Konstruktor, der
(implizit) durch ihre Subklassen aufgerufen wird, aber er
kann nicht direkt aufgerufen werden.
Jedoch, das Folgende ist OK:
. . . .
public static void main(String[] args)
{
. . . .
Karte postkarte =
new Valentin( "Joe", 14 );
// ein Valentin «Ist eine-» Karte
postkarte.gruss() ;
. . . .
}
Es ist OK eine Referenz auf ein Valentin
-Objekt in einer
Referenzvariable vom Typ Karte
zu speichern, denn Valentin
«Ist eine-» Karte
.
Wir können uns die Referenzvariable postkarte
als einen
Kartenhalter vorstellen, der dazu bestimmt ist jeden Typ von Karte
zu halten.
Meint Ihr, dass es OK sein würde das Folgende zu tun?
Karte postkarte2 = new Feiertag( "Bob" ) ; Karte postkarte3 = new Geburtstag( "Emily", 22 ) ;