zur vorherigen Seite   zum Inhaltsverzeichnis   zur nächsten Seite

Antwort:

Hier ist eine korrekte Antwort:

 public class KaufhausTester3
{
  public static void main ( String[] args )
  {
    Waren       spielzeug;
    Besteuerbar besteuerbar = new Spielwaren ( "Building Blocks", 1.49, 6 );

    spielzeug = (Spielwaren)besteuerbar;
    System.out.println( spielzeug );
    System.out.println( "Steuer: "+ ( (Besteuerbar)spielzeug ).berechneSteuer() );
  }
}

Noch mehr Übung

Die erste Typumwandlung muss besteuerbar in den Typ Spielwaren (oder den der Superklasse Waren) umwandeln. Die zweite muss spielzeug in Besteuerbar umwandeln oder in eine Klasse, die Besteuerbar implementiert.

Wenn wir über solche Probleme nachdenken müssen wir uns klarmachen, dass zu Kompilierzeit keine Objekte existieren. Der Compiler kennt die verfügbaren Methoden einer Referenzvariablen nur auf der Grundlage des Datentyps.

Zum Beispiel in dem oben stehenden sind für besteuerbar nur die Methode berechneSteuer() und die geerbten Methoden von Object verfügbar. Zur Laufzeit hat das Objekt, auf das besteuerbar verweist, mehr Methoden zur Verfügung. Um das dem Compiler mitzuteilen, verwenden wir eine Typumwandlung.


Hier ist ein andere mögliche Antwort:

  public static void main ( String[] args )
  {
    Waren       spielzeug ;
    Besteuerbar besteuerbar = new Spielwaren ( "Building Blocks", 1.49, 6 );

    spielzeug = (Waren)besteuerbar;
    spielzeug.anzeigen();
    System.out.println( "Steuer: "+ ( (Spielwaren)spielzeug ).berechneSteuer() );
  }

FRAGE 19:

Ist diese Antwort korrekt?