Antwort auf: Crashkurs-Aufgaben zu Polymorphie

EIDI-Crashkurs 2020 Crashkurs-Aufgaben zu Polymorphie Antwort auf: Crashkurs-Aufgaben zu Polymorphie

#3188

Zusatzaufgabe: Polymorphie mit Attributen

Die Java-Dateien der Polymorphie-Aufgaben aus dem Crashkurs findest du hier.
Die unkommentierte Lösung zu dieser Aufgabe findest du hier, ein Objektdiagramm hier.

public class AttributPoly {
   static class A {
      protected B a;
      public A() { a = new C(this); }
      public A(B b) { set(b); }
      public void set(B b) { a = b; }
      void f(B b) { System.out.println("A.f(B)"); a.f(this); }
   }
   static class B extends A {
      public B(B b) { super(b); }
      public B() { }
      void f(A a) { System.out.println("B.f(A)"); this.a.f(a); }
      void f(B b) { System.out.println("B.f(B)"); }
   }
   static class C extends B {
      private A a;
      public C(A a) { super(null); this.a = a; }
      void f(A a) { System.out.println("C.f(A)"); }
      void f(B b) { System.out.println("C.f(B)"); a.f(this); }
      void f(C c) { System.out.println("C.f(C)"); }
   }
   public static void main(String[] args) {
      B b = new B(); A a = new A();
      B c = a.a;
      c.set(b);
      b.a.set(c);
      b.f(a);         // Aufruf 1
      c.f((C)c);      // Aufruf 2
      a.f(a);         // Aufruf 3
      b.a.f(c);       // Aufruf 4
      a.f(b);         // Aufruf 5
      ((C)c).a.f(c);  // Aufruf 6
      ((C) a.a.a.a).a.a.a.f(a);  // Aufruf 7
   }
}