Kann mir jemand helfen meine Aufgabe für die Uni zu verstehen ich komme bei der Fragestellung nicht weiter?


01.12.2021, 15:57

Ok mit Feldern sind wohl Variablen gemeint!


01.12.2021, 15:59

Das hier ist ein Teil meiner Klasse Person

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet
1) Was ist mit weiteren Feldern in der ersten Frage gemeint?

Der Fachbegriff für eine Instanz-/Klassenvariable ist Feld. Weitere häufig verwendete Synonyme sind Attribut oder Eigenschaft.

Ihr sollt nun wohl weitere Felder ergänzen, damit eine Person eindeutig identifizierbar ist. Es kann z.B. zwei Thomas Müller auf der Welt geben, doch mit Zunahme weiterer Eigenschaften (Alter, Größe, Gewicht, ...) reduziert sich die Wahrscheinlichkeit, dass solche Fälle noch weiter als gleich bezeichnet werden können.

2) Warum soll ich hier die Methode equals überschreiben?

Die equals-Methode, die standardmäßig von der Object-Klasse geerbt wird, vergleicht Objekte mit dem Vergleichsoperator. Es wird also geschaut, ob beide Objekte identisch sind (am selben Speicherort liegen).

Person max = new Person("Max");
Person clone = new Person("Max");

boolean bothAreTheSame = max.equals(clone); // false

Das beabsichtigte Verhalten wäre hier aber, dass nicht geschaut wird, ob die Objekte identisch sind, sondern nur gleich in ihren Eigenschaften. Im obigen Beispiel-Snippet sollte das Ergebnis also eigentlich true sein. Um das zu erreichen, muss die equals-Methode überschrieben und mit einer eigenen Vergleichslogik befüllt werden. So würde es Sinn machen, die einzelnen Eigenschaften miteinander zu vergleichen.

Wenn man die equals-Methode überschreibt, sollte übrigens ebenso die hashCode-Methode überschrieben werden. Eure Aufgabenstellung fordert es nicht explizit und falls euer Dozent dazu noch nichts erwähnt hat, ist es vielleicht auch noch nicht zu beachten. Dennoch verlinke ich hiermit einmal eine Antwort von mir, die ich vor ein paar Wochen zu diesem Thema geschrieben habe. Sie erklärt etwas die Hintergründe dazu und listet zudem Anforderungen auf, die eine equals-Implementation erfüllen sollte.

Die toString Methode überschreiben um relevante Daten auszugeben? Was genau sind relevante Daten??

Liste einfach die Felder der Person auf, die relevant sind, um sie zu beschreiben. Am besten hübsch formatiert. Die format-Methode der String-Klasse eignet sich hierbei sehr gut, um den String zu formatieren und den Code lesbarer zu halten.

Beispiel:

int age = 45;
String info = String.format("I am %d years old.", age);

Das erste Argument entspricht einem Template-String. Er beschreibt, wie der finale String aussehen soll. In ihm kannst du Platzhalter nutzen, die später gegen die Werte ausgetauscht werden, die du als weitere Argumente für die Methode angibst. Mehr dazu (welche Platzhalter und Formatierungsmöglichkeiten es gibt) kannst du hier nachlesen.

Durch das Überschreiben der toString-Methode bekommst du bei Ausgabe des Objekts nicht mehr ein Hashcode-artiges Gebilde zurückgeworfen, sondern den String, den deine Implementation liefert.

Beispiel, bei der toString den Namen zurückgibt:

Person person = new Person("Max");
System.out.println(person); // "Max"

Victor12351739 
Beitragsersteller
 02.12.2021, 13:57

Vielen dank habe es jetzt verstanden und die Aufgabe auch gerade gelöst. mit command n(windows alt n glaube ich) kann man sich automatisch die equals Methode mit der hashcode Methode generieren lassen habe alles dann so geändert, dass beim vergleich zwischen der person und dem "Klon" der boolean auf true gesetzt wird, wenn die Instanzen der Personen die gleichen Inhalte haben.

0