"Grundkurs Programmieren in Java - (8. Auflage, 2018)"
2001-2018, Carl Hanser Verlag

Lösungsvorschlag zu Aufgabe 8.4 (Version 3.0)

(c) 2001-2018 D. Ratz, D. Schulmeister-Zimolong, D. Seese, J. Wiesenberger

Beim Compilieren erhät man zwei Fehlermeldungen:
  E:\hiwi\temp>javac InstanceOfTest.java
  InstanceOfTest.java:28: inconvertible types
  found   : Vater
  required: Waehrung
      System.out.println( vaeterchen instanceof Waehrung );
                          ^
  InstanceOfTest.java:32: inconvertible types
  found   : Sohn
  required: Waehrung
      System.out.println( soehnchen  instanceof Waehrung );
                          ^
  2 errors
Das Objekt vaeterchen ist vom Typ Vater und kann deshalb kein Objekt vom Typ Waehrung sein (vgl. auch Abbildung 9.3 im Buch: Vater erbt weder direkt noch indirekt von Waehrung), weshalb der Compiler meckert. Ebenso verhält es sich mit soehnchen.

Kommentiert man diese beiden Zeilen aus, kann man das Programm übersetzen und erhält bei der Ausführung folgende Ausgabe:
  E:\hiwi\temp>java InstanceOfTest
  false
  true
  true
  true
  true
  true
Würde man aber die Variablen vaeterchen und soehnchen vom Typ Object deklarieren (problemlos möglich, da die Klasse Vater sowie die Klasse Sohn von Object erben), so können wir das Programm übersetzen:
    Object vaeterchen = new Vater();
    Object  soehnchen  = new Sohn();
und würden folgende Ausgabe erhalten:
  E:\hiwi\temp>java InstanceOfTest
  false
  true
  false
  true
  true
  true
  false
  true


Quelltext: InstanceOfTest.java