Objekt obj0 = new Objekt(100, "Grün");
Objekt obj1 = new Objekt(200, "Blau");
Und zwar möchte ich meine erzeugten Objekte inklusive dazugehöriger Paramter in einem Array abspeichern und mittels einer for-Schleife ausgeben lassen.
Ich habe folgendes probiert:
Java:
Objekt[] objekte ={obj0, obj1};for(int i =0; i < objekte.length; i++){System.out.println(objekte[i].toString());
Der Zugriff auf ein einzelnes Objekt im Array erfolgt über den sog. Index. In deinem Fall die Laufvariable i der Schleife.
objekte[0] ist das erste Element im Array, objekte[1] das Zweite, usw.
Ansonsten:
Aktuell rufst du die Methode toString() auf, deren Standardimplementation von Object geerbt wird. Diese gibt einen Hashwert aus. Du kannst diese aber in der Deklaration deiner Klasse "Objekt" überschreiben, z.B.
Java:
classFoo{privateint value =42;@OverridepublicStringtoString(){return"Wert:"+ value;}}
Danke für die Antwort, ich weiss wie man die Objekte eines Arrays ausruft.
Aber ich wollte obj0 und obj1 mit den jeweiligen Parametern ausgeben lassen und bekomme diese Verknüpfung nicht hin.
classFoo{publicint value;// Instanzvariablen sollten i.d.R. nicht public sein!publicFoo(int value){this.value = value;}// Getter-Methode für "value". Das ist eher die Regel, zusammen mit einer "private" InstanzvariablepublicintgetValue(){return value;}@OverridepublicStringtoString(){return"Wert = "+ value;}}publicstaticvoidmain(){Foo f1 =newFoo(1);Foo f2 =newFoo(2);Foo[] arr ={ f1, f2 };for(int i =0; i < arr.length; i++){// 1. Zugriff auf das öffentliche AttributSystem.out.println(arr[i].value);// 2. Zugriff über getterSystem.out.println(arr[i].getValue());// 3. Zugriff über toString()System.out.println(arr[i]);// toString() wird intern von println aufgerufen und kann deshalb hier entfallen}}
Doch, er macht es. Daher ist die Schrift nach Objekte kursiv. Da er keine Code Tags verwendet hat, wird das [i] als Anweisung für kursive Schrift gewertet ...
Das Problem ist also tatsächlich die toString Methode in Object, die er zur sinnvollen Ausgabe überschreiben sollte. (#2)
Und die anderen Optionen von Dir in #7 sind auch valide aber geben natürlich nur einen einzelnen Wert und nicht das Objekt an sich aus.
Doch, er macht es. Daher ist die Schrift nach Objekte kursiv. Da er keine Code Tags verwendet hat, wird das [i] als Anweisung für kursive Schrift gewertet ...
Die vom Entwickler festgelegte String Representation der Instanz bzw. Klassenname@HashCode so toString nicht überschrieben wurde.
Und "Objekt ausgeben" bedeutet eben die Ausgabe vom Objekt. Wenn Du ein AMG haben möchtest und ich gebe Dir dann eine Fußmatte aus dem AMG: Das ist doof.
Wenn Dich natürlich nur die Fußmatte interessiert hat, dann kann das Ergebnis das Gleiche sein. Aber vom Ablauf her ist es etwas anderes.
Wobei "sinnvolle Ausgabe von toString" und generell "sinnvolle" ja unterschiedliche Dinge sind. Was in toString sinnvoll sein kann, kann als Ausgabe in z.B. einer Konsolen- oder GUI-Anwendung völlig unsinnig sein.
Wobei "sinnvolle Ausgabe von toString" und generell "sinnvolle" ja unterschiedliche Dinge sind. Was in toString sinnvoll sein kann, kann als Ausgabe in z.B. einer Konsolen- oder GUI-Anwendung völlig unsinnig sein.
Ja, wenn man das betrachtet, dann wird toString generell unsinnig. Dann kommt vermutlich zu einer Trennung von Model und View. Das Model weiss nicht, was dann bei der View angezeigt wird und wie es angezeigt wird.
Aber das Ändert nichts an dem Punkt: Es mag sein, dass die Frage nach Deinem Auto dann nur das Nummernschild zurück gibt. Aber dennoch ist es ein Unterschied, ob ich Dein Auto oder das Nummernschild deines Autos ausgebe.
Diese Frage ist unabhängig davon, wie die Logik aufgebaut ist. Ob das Auto in Form einer toString das Nummernschild zurück gibt oder ob eine View ein Auto bekommt und dann nur das Nummernschild darstellt.
Wichtig ist: Die View bekommt das Auto und nicht nur das Nummernschild.
Das ist nur mein Gedanke - ich hoffe, ich konnte es etwas verdeutlichen. Ansonsten einfach ignorieren. In diesem einfachen Fall ist das auch nicht wirklich relevant. Und wenn es komplexer wird, dann stellt sich die Fragestellung automatisch nicht mehr ....
Wobei "sinnvolle Ausgabe von toString" und generell "sinnvolle" ja unterschiedliche Dinge sind. Was in toString sinnvoll sein kann, kann als Ausgabe in z.B. einer Konsolen- oder GUI-Anwendung völlig unsinnig sein.
Joshua Bloch empfiehlt in "Effective Java" ja immer toString() zu überschreiben: "Sofern praktikabel sollte toString() alle interessanten Informationen im Objekt zurückgeben." Das bedeutet aber nicht, dass diese Informationen des Objektes auch für die jeweilige Ausgabe (in der View) interessant sein müssen. Generell habe ich mit der Aussage "Ausgabe des Objektes an sich" etwas Probleme. Was soll das denn sein? Der Name der Klasse? Alle (wirklich alle?) Informationen, die im Objekt gekapselt sind? Ich denke weder noch und sehe die Informationen aus toString() weniger interessant für die Ausgabe in einer View, sondern als von Menschen lesbare Repräsentation eines Objektes für Debuggingzwecke und dann sind wir wieder bei Bloch. Die View sollte sich ihre Ausgabe über entsprechende Getter zusammenbauen, je nach Bedarf.
Joshua Bloch empfiehlt in "Effective Jave" ja immer toString() zu überschreiben: "Sofern praktikabel sollte toString() alle interessanten Informationen im Objekt zurückgeben." Das bedeutet aber nicht, dass diese Informationen des Objektes auch für die jeweilige Ausgabe (in der View) interessant sein müssen. Generell habe ich mit der Aussage "Ausgabe des Objektes an sich" etwas Probleme. Was soll das denn sein? Der Name der Klasse? Alle (wirklich alle!) Informationen, die im Objekt gekapselt sind? Ich denke weder noch und sehe die Informationen aus toString() weniger interessant für die Ausgabe in einer View, sondern als von Menschen lesbare Repräsentation eines Objektes für Debuggingzwecke und dann sind wir wieder bei Bloch. Die View sollte sich ihre Ausgabe über entsprechende Getter zusammenbauen, je nach Bedarf.
Das ist doch Wortklauberei und das habe ich doch schon in #13 versucht deutlich zu machen ...
Einfache weitere Erläuterung: Fakt ist, dass es einen Unterschied gibt zwischen
System.out.println(someInstance) und System.out.prinltn(someInstance.someAttribute).
Das erste ist halt das "Objekt an sich" -> "an sich" also in der Bedeutung von das Objekt selbst.) und das zweite ist eben keine Ausgabe vom Objekt sondern von einem Attribut des Objektes. Und sollte die Aufgabe sein, das Objekt auszugeben, dann kann das so bereits als falsch angesehen werden.
Ansonsten fällt mir nicht ein, wie ich meine Wortwahl noch besser erläutern sollte. Und das ist vollkommen unabhängig von dem Ganzen anderen, dem ich ja in keiner Weise widerspreche ...
Das ist doch Wortklauberei und das habe ich doch schon in #13 versucht deutlich zu machen ...
Einfache weitere Erläuterung: Fakt ist, dass es einen Unterschied gibt zwischen
System.out.println(someInstance) und System.out.prinltn(someInstance.someAttribute).
Das erste ist halt das "Objekt an sich" -> "an sich" also in der Bedeutung von das Objekt selbst.) und das zweite ist eben keine Ausgabe vom Objekt sondern von einem Attribut des Objektes.
Ruhig Brauner! Alles gut, ich hab dich schon verstanden. Ich bin mir allerdings nicht sicher, ob es in der Aufgabe (?) darum geht, das "Objekt an sich" oder eben einfach dessen Attribute auszugeben. Ist auch egal, der TO hat alle Möglichkeiten genannt bekommen und kann sich aussuchen, was sinnvoll ist.