[Probeklausur] Aufgabe 7.2

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

[Probeklausur] Aufgabe 7.2

Beitrag von Krümelmonster » 15. Dez 2007 19:47

In Aufgabe 7.2 ist die Ausgabe des Codes
in Zeile 52 und 53: Meine Frage ist nun: Warum?
Der Kostruktor, der eine integer als
Parameter hat, wird mit 3 aufgerufen.

Daraufhin wird y=4 gesetzt und mehr
passiert ja eigentlich nicht.

Da x in Klasse A (Zeile 2) mit 0 initialisiert
wurde, müsste x ja auch 0 bleiben.

Wo kommt also die 2 her?
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

n-finity
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 101
Registriert: 22. Dez 2006 15:38
Kontaktdaten:

Beitrag von n-finity » 15. Dez 2007 21:03

[...]Um diese Initialisierung sicherzustellen, ruft Java im Konstruktor einer jeden Klasse (ausgenommen java.lang.Object) automatisch den Standard-Konstruktor der Oberklasse auf, damit die Oberklasse »ihre« Attribute initialisieren kann. Es ist dabei egal, ob der Konstruktor in der Unterklasse parametrisiert ist oder nicht; jeder Konstruktor der Unterklasse muss einen der Oberklasse aufrufen[...]
Quelle: http://www.galileocomputing.de/openbook ... a80b67f82d

und im Standard-Konstuktor wird x mit 2 initialisiert

Benutzeravatar
guido
Computerversteher
Computerversteher
Beiträge: 378
Registriert: 30. Nov 2003 21:24
Wohnort: Mühltal
Kontaktdaten:

Beitrag von guido » 15. Dez 2007 21:19

n-finity hat geschrieben:
[...]Um diese Initialisierung sicherzustellen, ruft Java im Konstruktor einer jeden Klasse (ausgenommen java.lang.Object) automatisch den Standard-Konstruktor der Oberklasse auf, damit die Oberklasse »ihre« Attribute initialisieren kann. Es ist dabei egal, ob der Konstruktor in der Unterklasse parametrisiert ist oder nicht; jeder Konstruktor der Unterklasse muss einen der Oberklasse aufrufen[...]
Quelle: http://www.galileocomputing.de/openbook ... a80b67f82d

und im Standard-Konstuktor wird x mit 2 initialisiert
Oder anders gesagt: B(int i) ruft implizit den parameterlosen Konstruktor auf, also A(); der x=2, y=1, z=3 setzt. Dass y am Ende 4 ist, ist wohl klar (da y = i+1 und i=3). :)

Guido

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Beitrag von Krümelmonster » 15. Dez 2007 21:24

Ok, danke für die Antworten.

Ich war fälschlicherweiße der Meinung, dass
Konstruktoren von "unten" nach "oben" ausgeführt
werden, aber das Gegenteil ist der Fall.
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

Benutzeravatar
guido
Computerversteher
Computerversteher
Beiträge: 378
Registriert: 30. Nov 2003 21:24
Wohnort: Mühltal
Kontaktdaten:

Beitrag von guido » 16. Dez 2007 16:44

Krümelmonster hat geschrieben:Ok, danke für die Antworten.

Ich war fälschlicherweiße der Meinung, dass
Konstruktoren von "unten" nach "oben" ausgeführt
werden, aber das Gegenteil ist der Fall.
Gut, wenn sich das nun geklärt hat :)

Guido

Benutzeravatar
arit
Windoof-User
Windoof-User
Beiträge: 28
Registriert: 19. Nov 2007 00:08
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von arit » 16. Dez 2007 16:56

Mein Programm gibt mir folgende Werte aus:

2
0
2
0
2
1
2
4
3
3
1
2

Bevor ich mich nun an händischem ausrechnen versuche wollte ich mal sicher gehen, ob ich wenigstens richtige Werte zur Hand habe zwecks Fehler auffinden...
Guilty Gear und ST ftw!
-----> http://www.hardedge.org

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Beitrag von Krümelmonster » 16. Dez 2007 17:00

Mein Programm gibt das selbe aus.
(Was natürlich keine Garantie für
Richtigkeit ist.)
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

Benutzeravatar
s!mon
Computerversteher
Computerversteher
Beiträge: 373
Registriert: 20. Okt 2007 18:24
Wohnort: Höchst i. Odw

Beitrag von s!mon » 16. Dez 2007 17:06

Ja in der "Musterlösung" stehts auch so drin..

Benutzeravatar
arit
Windoof-User
Windoof-User
Beiträge: 28
Registriert: 19. Nov 2007 00:08
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von arit » 16. Dez 2007 17:20

Danke, eine Frage hätte ich da noch.

bei

q =new B();
System.out.println (q.get_x());
System.out.println (q.get_y());

wird ja ein neues B() erstellt, also y=1, x=2, z=3, dann wird x=y gesetzt (also 1) und anschließend y=x, was doch eigentlich auch 1 sein müßte da im Schritt zuvor x auf 1 gesetzt wurde? Woher kommt also die 2?
Guilty Gear und ST ftw!
-----> http://www.hardedge.org

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Beitrag von Krümelmonster » 16. Dez 2007 17:32

Im Konstruktor B() wird zuerst ein Objekt
von A() (foo) erzeugt.

In diesem Objekt ist: y=1, x=2, z=3.
Dem Objekt, das gerade initialisiert wird,
wird nun x dem y aus foo zugeordnet. (Also 1)
Und dem y wird dem x aus foo zugeordnet. (Also 2).
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

Antworten

Zurück zu „Archiv“