zur vorherigen Seite   zum Inhaltsverzeichnis   zur nächsten Seite

Antwort:

Die Superklasse Karte ist eine abstrakte Klasse und kann deshalb nicht instanziiert werden.

Abstrakte Klassen können nicht instanziiert werden

Das folgende können sie 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. Sie können sich die Referenzvariable postkarte als einen Kartenhalter vorstellen, der dazu bestimmt ist jeden Typ von Karte zu halten.

FRAGE 11:

Glauben Sie, dass es OK sein würde das Folgende zu tun?

Karte postkarte2 = new Feiertag( "Bob" ) ;
Karte postkarte3 = new Geburtstag( "Emily", 22 ) ;