Wenn ich jetzt eine toString-Methode schreiben will, wie mache ich das genau? Die Methode hat doch die Aufgabe hier, mein Rechteckobjekt "benutzerfreundlich" auszugeben.
D.h wenn ich mein Rechteck Objekt der print-Methode übergebe, bekomme ich eine von mir erzeugte Darstellung.
Also ich hätte folgende Idee:
Weis ich nicht. Ich hätte gedacht, dass man vielleicht sowas wie "sind gleich" ausgibt statt dem true?
Kann man meine aktuelle toString-Methode noch besser machen oder ist das in Ordnung?
Achso
Ja das ist besser. Danke
Oh, ich denke, Du verwechselst da verschiedene Dinge miteinander.
toString soll eine String-Darstellung des betreffenden Objekts liefern. Das Objekt ist in Deinem Fall ein einziges Rechteck. Deine toString()-Methode wäre also prinzipiell in Ordnung.
Wenn Du zwei Rechteck-Objekte r1, r2 hast und r1.equals(r2) aufrufst, dann gibt das zunächst ein boolean zurück (s. Rückgabetyp von equals). Dieses wird bei der Ausgabe von Java automatisch zu Zeichenketten ("true" bzw. "false") konvertiert.
Du willst nun zwei Rechtecke miteinander vergleichen und das Ergebnis (ggf. inkl. der Rechtecke) ausgeben.
Java:
// stellt den Vergleich der beiden Rechtecke r1 und r2 als// Zeichenkette darpublicStringvergleichsDarstellung(Rechteck r1,Rechteck r2){String nicht ="";if(r1.equals(r2)){
nicht =" nicht";}return"Das Rechteck\n"+ r1.toString()+"und das Rechteck\n"+ r2.toString()+" unterscheiden sich"+ nicht +".\n";}
Danke
D.h ich verwende dann meine schon geschriebene toString-Methode, um die Rechtecke zu vergleichen.
Meine toString gibt dann also nur gewisse einfache Attribute aus,während schwierigere Dinge in den Methoden dann geregelt werden?
publicclassTest{// stellt den Vergleich der beiden Rechtecke r1 und r2 als// Zeichenkette darpublicStringvergleichsDarstellung(Rechteck r1,Rechteck r2){String nicht ="";if(r1.equals(r2)){
nicht =" nicht";}return"Das Rechteck\n"+ r1.toString()+"und das Rechteck\n"+ r2.toString()+" unterscheiden sich"+ nicht +".\n";}publicvoidrun(){Rechteck r1 =newRechteck(...);Rechteck r2 =newRechteck(...);System.out.println(vergleichsDarstellung(r1, r2));}publicstaticvoidmain(String[] args){Test test =newTest();
test.run();}}
Hier wird einfach das bestehende Rechteck verwendet.
Ach so, dann habe ich Dich falsch verstanden. Dir ging es ums Überschreiben der equals-Methode? Die musst Du in Rechteck abändern:
Java:
publicbooleanequals(Object o){if(o ==null|| o ==this||!(o instanceofRechteck)){return o ==this;}Rechteck a =(Rechteck) o;return a.breite==breite && a.hoehe==hoehe;}
Ich habe das nur zusammenkopiert. Wsl habe ich Klammern vergessen usw.
Mir ging es um die Semantik. Vor allem, dass man in der toString Methode einfach nur die offensichtlichen Attribute ausgibt.