zur vorherigen Seite   zum Inhaltsverzeichnis   zur nächsten Seite

Antwort:

Hier ist eine korrekte Antwort:

public class StoreTester4
{
  public static void main(String[] args)
  {
    Goods   toy ;
    Taxable tax =
      new Toy("Building Blocks", 1.49, 6);

    toy = (Toy)tax;
    System.out.println(toy);
    System.out.println( "Tax: " +
      ( (Taxable)toy ).calculateTax() );
  }
}

Noch mehr Übung

Die erste Typumwandlung muss tax in den Typ Toy (oder den der Superklasse Goods) umwandeln. Die zweite muss toy in Taxable umwandeln oder in eine Klasse, die Taxable 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 tax nur die Methode calculateTax() und die geerbten Methoden von Object verfügbar. Zur Laufzeit hat das Objekt, auf das tax verweist, mehr Methoden zur Verfügung. Um das dem Compiler mitzuteilen, verwenden wir eine Typumwandlung.

In diesem Programm ist es offensichtlich, dass toy auf ein Objekt verweist, dass über eine Methode calculateTax() verfügt. Aber bei komplizierteren Programmen ist das nicht immer offensichtlich.


Hier ist ein andere mögliche Antwort:

public class StoreTester5
{
  public static void main(String[] args)
  {
    Goods   toy ;
    Taxable tax =
      new Toy ("Building Blocks", 1.49, 6);

    toy = (Goods)tax;
    System.out.println( toy );
    System.out.println( "Tax: " +
      ( (Toy)toy ).calculateTax() );
  }
}

FRAGE 19:

Ist diese Antwort korrekt?