Antwort auf: Crashkurs-Aufgaben zu Polymorphie

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

#3247

Es geht um den Aufruf a.f(this): a ist dynamisch nicht C sondern A!

  • thisist statisch C, weil wir in der Klasse C sind, und dynamisch ebenfalls C, weil beim vorherigen Aufruf  (c.f((C)c)) ein C-Objekt vor dem Punkt stand, d. h. wir operieren auf einem C-Objekt.
  • Nachdem wir also auf einem C-Objekt operieren, handelt es sich bei a um das Attribut a des C-Objekts, das ursprünglich durch A a = new A() innerhalb des A-Kontruktors mit new C(this) erzeugt wurde . Dort wird this (also während der Erzeugung von A das A-Objekt selbst) übergeben. Das C-Objekt speichert sich genau dieses A-Objekt in seinem Attribut a ab (mittels this.a = a), d. h. das hier verwendete a hat den dynamischen Typ A (und zwar genau das A-Objekt, das auch in der main-Methode gespeichert wird).

Daher suchen wir in A eine Methode f(C), finden statisch f(B) und führen diese Methode auch aus.