Wie alle Methoden kann auch die equals-Methode überschrieben werden. Nun wieder die Frage aller Fragen: Für was soll das gut sein?
Die Antwort ist relativ einfach; manchmal möchte man die Gleichheit eines Objektes nicht an einem kompletten Objekt ausmachen, sondern nur an bestimmten Eigenschaften:
class Angestellter {
public int PersNr;
public static void main(String[] args) {
Angestellter a = new Angestellter();
Angestellter b = new Angestellter();
System.out.println(a.equals(b));
a.PersNr=1;
b.PersNr=1;
System.out.println(a.equals(b));
}
}
Hier ist der Output jeweils false; da die Objekte ja nicht komplett identisch sind. Wollen wir aber einen Vergleich anhand der Personalnummer müssen wir die equals-Methode überschreiben:
class Angestellter {
public int PersNr;
public boolean equals(Angestellter c)
{
if (c.PersNr==this.PersNr){
return true;
}
else {
return false;
}
public static void main(String[] args) {
Angestellter a = new Angestellter();
Angestellter b = new Angestellter();
System.out.println(a.equals(b));
a.PersNr=1;
b.PersNr=1;
System.out.println(a.equals(b));
}
}
Hier ist der Output jeweils true; die Objekte werden ja nur anhand der Personalnummer verglichen, welche Standardmäßig mit 0 vorbelegt wurde und später jeweils den Wert 1 zugewiesen bekam.