public class AutoTest { public static void main (String args[]) { Auto[] dieAutos = new Auto[3]; dieAutos[0] = new Auto("BMW 316i", "AB-C 123", 85); dieAutos[1] = new Auto ("Audi", "M-U 25", 75); dieAutos[2] = new Cabrio("Mazda MX5", "HO-B 123", 65, "Jeans"); for (int i=0; i < dieAutos.length; i++) { System.out.println(dieAutos[i].getKleinanzeigenText()); } // Verwendung des Cabrios in Auto-Referenz wird vom Compiler nicht // erlaubt: cannot resolve symbol : method getVerdeckFarbe () : class Auto // Dies bemerkt bereits der Compiler // Deshalb muss der Type zurückgewandelt werden. // Entweder durch zwischenspeichern in Cabrio-Referenz Cabrio c= (Cabrio) dieAutos[2]; System.out.println("Die Verdeckfarbe von Auto No 3 ist " + c.getVerdeckFarbe() ); // Oder direkt durch Cast ; wegen Operator-Vorrangregeln muss der Cast // mit () an die Variable gebunden werden. System.out.println("Die Verdeckfarbe von Auto No 3 ist " + ( (Cabrio) dieAutos[2] ) .getVerdeckFarbe() ); // dann ist der Compiler zufrieden. // Casting von Referenzen die die Super-Klasse enthalten, nicht die // gecastete Sub-Klasse ... sind eine schlechte Idee: // System.out.println("Die Verdeckfarbe von Auto No 1 ist " // + ( (Cabrio) dieAutos[0] ) .getVerdeckFarbe() ); // Exception in thread "main" java.lang.ClassCastException // at AutoTest.main(AutoTest.java:29) // Dies wurde dann erst vom Interpreter bemerkt; da wir dem Compiler // ja per Cast zugesagt haben, dass der richtige Type enthalten sein wird. } }