Moin,
http://java.sun.com/docs/books/tutorial/java/data/ob…
die Abbildung ganz unten ist doch falsch, oder etwa doch nicht (ist ja immerhin auf der Sun-HP)? Sonst müsste doch beim folgenden Programm bei der zweiten Ausgabe xpunkt gleich xrechteck sein.
public static void main(String[]args) {
Point punkt = new Point(1,2);
Rectangle rechteck = new Rectangle(punkt);
double xpunkt = punkt.getX();
double xrechteck = rechteck.getLocation().getX();
System.out.println(xpunkt+" = „+xrechteck);
rechteck.setLocation(3,4);
punkt.setLocation(5,6);
xpunkt = punkt.getX();
xrechteck = rechteck.getLocation().getX();
System.out.println(xpunkt+“ != "+xrechteck);
}
Wenn man jetzt vom Konstruktoraufruf ausgehen würde, dann könnte man origin_one durch p ersetzen. Und dann wäre die Abbildung auch korrekt. Oder hab ich das alles etwa nicht verstanden? Bitte um Aufklärung.
Gruß, Cosmo
OK, hier der komplette Quelltext
import java.awt.Point;
import java.awt.Rectangle;
public class Class1 {
public static void main(String[]args) {
Point punkt = new Point(1,2);
Rectangle rechteck = new Rectangle(punkt);
double xpunkt = punkt.getX();
double xrechteck = rechteck.getLocation().getX();
System.out.println(xpunkt+" = „+xrechteck);
rechteck.setLocation(3,4);
punkt.setLocation(5,6);
xpunkt = punkt.getX();
xrechteck = rechteck.getLocation().getX();
System.out.println(xpunkt+“ != "+xrechteck);
}
}
import java.awt.Point;
import java.awt.Rectangle;
Rectangle ist nicht gleich Rectangle. Du verwendest in
deinem Code java.awt.Rectangle. Darin wird nicht der Point
selbst gespeichert, sondern nur x und y (siehe Konstruktor
java.awt.Rectangle). Mit einem Debugger kannst du das auch
gut sehen.
public Rectangle(Point p) {
this(p.x, p.y, 0, 0);
}
In dem Tutorial wird eine andere Klasse Rectangle beschrieben.
Benutz mal diese Klasse fuer deine Tests und implementiere
die fehlenden Methoden entsprechend (setLocation, getX, getY),
dann wirst du feststellen, dass beide Ausgaben gleich sind.
Gruss, Patrick
1 „Gefällt mir“
Moin Patrick,
vielen Dank! Leider ist jetzt mein Javaweltbild zusammengebrochen, und das war so schön. Ich hab setLocation(int,int) auf zwei verschiedenen Arten implementiert:
1.) this.origin.setLocation(x,y);
2.) this.origin = new Point(x,y);
Bei der ersten Variante veränder ich das Objekt, auf den punkt und origin zeigen, und habe somit zweimal den gleichen Wert. Bei der zweiten Wert erzeuge ich ein neues Point-Objekt und lasse origin darauf verweisen. Jetzt ist also der Rückgabewert von der Implementierung abhängig. Das ist doch Mist. Was will man machen? 
Gruß, Cosmo
zusammengebrochen, und das war so schön. Ich hab
setLocation(int,int) auf zwei verschiedenen Arten
implementiert:
1.) this.origin.setLocation(x,y);
2.) this.origin = new Point(x,y);
Fuer mich sieht das so aus, als wenn du setLocation nur
auf eine Art implentiert hast, naemlich setLocation(int,int).
lasse origin darauf verweisen. Jetzt ist also der Rückgabewert
von der Implementierung abhängig. Das ist doch Mist. Was will
man machen? 
Ich weiss jetzt nicht so genau worauf du hinaus willst.
Welcher Rueckgabewert?
Bezogen auf dein Testprogramm solltest du setLocation
in der (Tutorial)Klasse Rectangle implentieren, nicht
in Klasse Point.
...
public void setLocation(int x, int y) {
origin.x = x;
origin.y = y;
}
public int getX() {
return origin.x;
}
public int getY() {
return origin.y;
}
...
Gruss, Patrick
zusammengebrochen, und das war so schön. Ich hab
setLocation(int,int) auf zwei verschiedenen Arten
implementiert:
1.) this.origin.setLocation(x,y);
2.) this.origin = new Point(x,y);
Fuer mich sieht das so aus, als wenn du setLocation nur
auf eine Art implentiert hast, naemlich setLocation(int,int).
Also ich hatte die andere Version nur auskommentiert:
public void setLocation(int x, int y) {
this.origin.setLocation(x,y);
//this.origin = new Point(x,y);
}
lasse origin darauf verweisen. Jetzt ist also der Rückgabewert
von der Implementierung abhängig. Das ist doch Mist. Was will
man machen? 
Ich weiss jetzt nicht so genau worauf du hinaus willst.
Welcher Rueckgabewert?
Äh ja, Rückgabewert ist natürlich quatsch.
Bezogen auf dein Testprogramm solltest du setLocation
in der (Tutorial)Klasse Rectangle implentieren, nicht
in Klasse Point.
…
public void setLocation(int x, int y) {
origin.x = x;
origin.y = y;
}
public int getX() {
return origin.x;
}
public int getY() {
return origin.y;
}
…
Hatte ich auch gemacht. Das was ich eigentlich sagen wollte, wär jetzt wohl doch ein bisschen viel zu schreiben. Auf jeden Fall hab ich’s jetzt wohl verstanden. Danke nochmal.
Cosmo
Also ich hatte die andere Version nur auskommentiert:
Verstehe, aber…
public void setLocation(int x, int y) {
this.origin = new Point(x,y);
}
…das wuerde ich nicht unbedingt machen, denn als Benutzer
erwarte ich bei so einer Methode eher, dass tatsaechlich
nur die location an dem Object gesetzt wird und nicht gleich
ein neues erzeugt wird.
Stell dir vor Point wuerde noch andere Attribute haben. Die
waeren damit dann alle verloren.
Fuer das Tutorial ist es vielleicht egal, aber in anderen
Faellen waere der Benutzer dann sicher ueberrascht.
Gruss, Patrick