Object ist direkte oder indirekte Oberklasse alles Klassen
Die Methoden der Klasse Object werden an alle anderen Klassen vererbt. Sie stehen in jeder Klasse zu verfügung, und zwar entweder
unverändert (falls nicht überschrieben), oder
modifiziert (falls überschrieben
Mit welcher Methode testet man, ob 2 Objekte gleich sind?
Mit der Methode equals().
Kopf der Methode:
public boolean equals(Object obj)
Das Problem bei der Gleichheit von Objekten bei der vordefinierten equals() Methode ist, dass ein Objekt nur mit sich selbst gleich ist.
Wenn man die Gleichheit von Objekten von den Attributen abhängig machen will, die sie besitzen.
Z.B. die Variablen für die Längen eines Objekts der Klasse Rechteck.
(Gleiche Längen = Objekte sind gleich)
So könnte eine überschriebene Methode equals() aussehen.
Bei if wird geguckt, ob das per Parameter übergebene Objekt ein Buch ist. Wann das der Fall ist, muss das obj erst nochmal in einer neuen variable Buch gespeichert werden.
Dann kann man prüfen, was man überprüfen möchte.
Würde man obj nicht vorher in b speichern, würde obj versuchen titel.equals in der Klasse Object auszuführen, wo es die variablen nicht gibt.
Der Parameter der Methode equals() soll Object sein, da man nur so die Methode überschreibt.
public boolean equals(Object)
Würde man das schreiben:
public boolean equals(Buch)
würde man die equals() Methode nur überladen und die alte Methode würde weiterhin bestehen.
Man hat ein Variable des Typs Object. Sie enthält ein Buch Objekt.
Man nehme an, man hat in der Klasse Buch die Methode equals() überschrieben, in welcher Klasse wird die equals() Methode ausgeführt, wenn man folgendes versucht? :
In der Klasse Object oder der Klasse Buch?
In der Klasse Buch.
Es kommt nicht darauf an, was für ein Typ die Variable obj ist, sondern was sie enthält und das ist ein Objekt der Klasse Buch.
Daher kommt true raus.
Das, was als Parameter in der Methode steht hat mit der Entscheidung gar nichts zu tun. Nur das, was vor dem Punkt steht entscheidet.
2 Objekte, die laut der equals() Methode nicht gleich sind, dürfen den gleichen Hash-Code haben.
Das bedeutet auch, dass wenn 2 Objekte den gleichen Hash-Code haben, diese Objekte nicht automatisch gleich sind.
Beispiel für das Überschreiben einer Hash-Code Methode
Eine Hash-Code Methode liefert immer einen int Wert zurück!
Will man ein Objekt als Text ausgeben und macht das mit System.out.println(buch);
kommt nur Quatsch heraus.
Was muss man also tun, damit man eine vernünftige Ausgabe bekommt?
Man muss die toString() Methode in der jeweiligen Klasse überschreiben.
Durch System.out.println() wird die Methode valueOf(Object) aufgerufen, die dann die Methode toString() aufruft.
Wenn man die Methode toString() also überschrieben hat, muss man diese nicht direkt aufrufen, sondern es geht einfach mit System.out.println()
Last changed2 years ago