PROGRAMMIERAUFGABE 11.1 AUFGABE 11.2/11.3 public class A { public void f() { System.out.println("A/f"); } } public class B extends A { public void f() { System.out.println("B/f"); } public void g() { System.out.println("B/g"); System.out.println("now calling this.f:"); this.f(); System.out.println("now calling super.f:"); super.f(); } } public class C extends B { public void f() { System.out.println("C/f"); } } ... B b = new B(); C c = new C(); B bc = new C(); b.f(); // B/f c.f(); // C/f bc.f(); // C/f b.g(); // B/g // now calling this.f: // B/f // now calling super.f: // A/f c.g(); // B/g // now calling this.f: // C/f // now calling super.f: // A/f bc.g(); // B/g // now calling this.f: // C/f // now calling super.f: // A/f ... - Macht es einen Unterschied, ob das Objekt, dem die Nachricht geschickt wird, zur Ober- oder zur Unterklasse gehört?: ja, b (Klasse B) unterscheidet sich im Verhalten von c und bc (Klasse C). - Macht es im zweiten Fall einen Unterschied, ob das Objekt in einer Variablen der Ober- oder der Unterklasse steckt? nein, c und bc unterscheiden sich nicht in ihrem Verhalten. AUFGABE 11.4 1. inkorrekt: A ist abstrakt => new A() ist nicht möglich. 2. inkorrekt: o3 kann c3 nicht zugewiesen werden (falscher Typ) 3. korrekt 4. inkorrekt: Cast schlägt fehl => Laufzeitfehler. 5. inkorrekt: b6 ist kein zulässiges Argument für cFunc (falscher Typ) 6. korrekt 7. korrekt 8. inkorrekt: Eine Unterklasse von A muß entweder selbst abstrakt sein oder aFunc implementieren.