Programmanalyse

Marmalada

Neues Mitglied
Hallo, was ist der Unterschied bei Out 3 zwischen ((A) b).x und b.x ? Ich verstehe nicht wie man da auf 1 für ((A) b).x kommt.
 

Anhänge

  • Screenshot (11).png
    Screenshot (11).png
    144,9 KB · Aufrufe: 37

mihe7

Top Contributor
b.x bezeichnet in dem Fall die in Klasse B deklarierte Instanzvariable x. ((A) b) weist den Compiler an, das b wie ein A zu behandeln. Dort ist x eine Klassenvariable. D. h. ((A) b).x ist im Ergebnis A.x.

Unmittebar vor dem Aufruf new B(3); gilt A.x == 3, A.y == 4. Die drei Zeilen im Konstruktor von B machen nun folgendes:
  1. Zunächst wird der "int"-Konstruktor von A aufgerufen, dort wird A.x um 1 erhöht. Es gilt nun also A.x == 4
  2. this.x bezieht sich auf die Instanzvariable x von B, diese wurde mit 1 initialisiert und um den via Parameter x angegebenen Wert von 3 erhöht => b.x == 4
  3. In der letzten Zeile wird ein neues A-Objekt erzeugt mit einem Long-Objekt (Wert: 3L) als Parameter. Für dieses wird der "double"-Konstruktor von A ausgeführt. Dieser verringert A.x um den angegebenen Wert, also um 3. Es gilt: A.x == 4 - 3 == 1
  4. Zum Schluss wird nun das y-Attribut von dem in Schritt 3 erzeugten A-Objekt der Instanzvariable (EDIT: ist keine, es wird nur so getan als ob) y des B-Objekts zugewiesen. Da das y-Attribut weder Instanzvariable von der einen noch von der anderen Klasse ist, könnte dort auch B.y = A.y stehen.
Ich hoffe, dass ich mich nirgends vertan habe :)
 

Ähnliche Java Themen

Neue Themen


Oben