Kann mir jemand helfen meine Aufgabe für die Uni zu verstehen ich komme bei der Fragestellung nicht weiter?
Hi ich bin im ersten Semester für Wirtschaftsinformatik und bin auf moderatem Level, was programmieren mit Java angeht. Ich habe immer sehr große Schwierigkeiten die Aufgabenstellungen zu verstehen, die uns unser Prof stellt (bin da auch kein Einzelfall).
Ich habe bereits aus einer älteren Aufgabe eine Klasse Person mit mehreren Subklassen (Studenten, Bachelorstudent, Angestellte,...) ebenfalls habe ich verschiede Variablen, die etwas über die Objekte der Klasse Person aussagen (Bsp. Name). Was ich an der Aufgabe nicht verstehe:1) Was ist mit weiteren Feldern in der ersten Frage gemeint? Wie kann ich mit "weiteren Feldern" alle Felder zusammenfügen? Es ist bereits so, dass alle Klassen von der Oberklasse Person erben, sie jedoch trotzdem unterschiedliche Methoden/Instanzen besitzen. 2) Warum soll ich hier die Methode equals überschreiben? Anscheinend soll ich das ganze mit der equals Methode machen... 3) Die toString Methode überschreiben um relevante Daten auszugeben? Was genau sind relevante Daten?? Ich finde die Aufgaben sind sehr flach gestellt und ich weiß nicht, was ich wirklich machen soll, trotz einem halben Jahr Übung mit Java.
Danke im Voraus Victor
Ok mit Feldern sind wohl Variablen gemeint!
Das hier ist ein Teil meiner Klasse Person
1 Antwort
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"
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.