Die Superklasse Karte ist eine abstrakte Klasse und
kann deshalb nicht instanziiert werden.
Das folgende können sie nicht tun:
. . . .
public static void main ( String[] args ) throws IOException
{
. . . .
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 ) throws IOException
{
. . . .
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.
Sie können sich die Referenzvariable postkarte als einen
Kartenhalter vorstellen, der dazu bestimmt ist jeden Typ von Karte
zu halten.