Würde das Folgende funktionieren?
artikel1.anzeigen() ;
Nein. Alles was dem Compiler mitgeteilt wurde war, dass artikel1
die Methoden der Schnittstelle Besteuerbar
implementiert.
Die anzeigen()
Methode ist nicht in der Schnittstelle.
Wenn Sie eine Variable vom Typ Besteuerbar
verwenden,
fordern Sie den Aspekt "Besteuerbar" des Objekts an.
Viele unterschiedliche Arten von Objekten könnten durch die Variable referenziert werden.
(In einem größeren Programm könnte es "Besteuerbare" Klassen geben, die keine Waren
sind.)
Der Compiler kann nur die Methoden verwenden, von denen er weiß, dass sie ein Objekt haben muss — die der Schnittstelle.
Aber Sie können eine Typumwandlung verwenden, um dem Compiler mitzuteilen, dass in einer speziellen Anweisung des Programms die Variable auf ein Objekt einer bestimmten Klasse verweist:
public static void main ( String[] args ) { Besteuerbar artikel1 = new Buecher ( "Emma", 24.95, "Austin" ); System.out.println( "Steuer fuer Artikel 1: " + artikel1.berechneSteuer() ); ( (Buecher)artikel1 ).anzeigen(); }
Dieses Programm ist nicht allzu sinnvoll, da alles ohne die Notwendigkeit einer
Typumwandlung funktionieren würde, wenn die Variable artikel1
vom Typ Buecher
wäre.
Aber in Programmen mit einer komplizierteren Logik sind solche Konvertierungen manchmal notwendig.