Equal-Methode überschreiben

Swingman

Grünschnabel
Hallo,
ich versuche gerade die equals-Methode der Superklasse Object zu überschreiben, um alle Referenztypen auf Inhaltsgleichheit überprüfen zu können. In der Literatur habe ich andeutungsweise gesehen, das es nicht gehen soll. Stimmt das? Und wenn ja, wie könnte es dann für bestimmte Referenztypen gemacht werden. Könnt ihr mir ein Bsp oder so zeigen D.h. muss für jeden erforderlichen Typ extra die equals-Methode überschreiben ?

Danke für eure Hilfe
 
Tach,
wieso soll das nicht gehen?

Code:
public class EqualsTest
{
  private String m_sName = "";
  private int m_iID = 0;
  
  public EqualsTest(int ID, String name)
  {
    m_sName = name;
    m_iID = ID;
  }
  
  public boolean equals(Object obj)
  {
    if ( (((EqualsTest)obj).m_sName.equals(m_sName))
        && (((EqualsTest)obj).m_iID == m_iID) ) 
        return true;
    return false;
  }
  public static void main( String[] args )
  {
    EqualsTest objectOne = new EqualsTest(1, "Hund");
    EqualsTest objectTwo = new EqualsTest(1, "Katze");
    EqualsTest objectThree = new EqualsTest(1, "Maus");
    EqualsTest objectFour = new EqualsTest(3, "Maus");
    EqualsTest objectFive = new EqualsTest(1, "Katze");
    
    System.out.println("objectOne equals objectTwo? -> " + objectOne.equals(objectTwo));
    System.out.println("objectOne equals objectThree? -> " + objectOne.equals(objectThree));
    System.out.println("objectThree equals objectFour? -> " + objectThree.equals(objectFour));
    System.out.println("objectTwo equals objectFive? -> " + objectTwo.equals(objectFive));
  }
}

Wofür die equals-Methode gut ist, kann man schön sehen, wenn man das Programm einmal startet, so wie es oben steht, und ein weiteres mal, wenn die equals-Methode auskommentiert ist.
 
Zuletzt bearbeitet:
Hallo,
Snape hat gesagt.:
Tach,
wieso soll das nicht gehen?
Swingman meinte:
ich versuche gerade die equals-Methode der Superklasse Object zu überschreiben, um alle Referenztypen auf Inhaltsgleichheit überprüfen zu können. In der Literatur habe ich andeutungsweise gesehen, das es nicht gehen soll.

Meines Erachtens ist das nicht möglich, wobei sich bei mir die nächste Frage daraus
Schlussfolgert:

Mich würde zu dem Thema intressieren wieso man die Methode überhaupt überschreiben
muss?

Kann mans nicht einfach so machen:
Code:
  public boolean equals(EqualsTest test)
  {
    if ( (test.m_sName.equals(m_sName))
        && (test.m_iID == m_iID) ) 
        return true;
    return false;
  }
und sich somit das umständliche down gecaste sparen, wenn ich eh für jeden Typ die
Methode neu Überschreiben muss.

Wo der Unterschied zwischen meiner und Snapes Variante ist, ist mir klar
aber kann mir mal jemand ein Beispiel verraten wo das Überschreiben der Methode equals
dem Überladen vorzuziehen ist, damit ich ein Sinn drin sehe?

Danke und Gruß

RedWing
 
Zuletzt bearbeitet:
Scheint ja ne eigene Philosophie zu dem Thema zu geben..

Naja auf jeden Fall ne informative Quelle und nur weiterzuempfehlen...

Gruß

RedWing
 
Warum Grabe ich dies aus?

Ich würde gern mehr über das Überschreiben von equals und Hashcode erfahren.

Warum man das macht ist klar, In Anwendungen die Verteilt ihre Daten vorhalten kann es mal passieren das Objekte an zwei verschiedenen stellen im Speicher liegen und somit ein false produzieren, obwohl sie identisch sind!



Leider sind die Links von Thomas nicht mehr Aktiv :(
 
Zurück