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.