Zugriff auf private Membervariable durch equals()

D

Data1992

Hallo zusammen,
wahrscheinlich ist die Antwort auf meine Frage ziemlich banal, aber ich sehe den Wald vor lauter Bäumen nicht.
Wir haben in unserer Vorlesung eine Klasse "Coord" definiert:

Code:
class Coord {
  private int x;
  private int y;

  public Coord(int x, int y) {
    this.x = x;
    this.y = y;
  }

  public equals(Object value) {
    return x == ((Coord) value).x & y == ((Coord) value).y;
  }
}

Diese Klasse wird in einem Programm verwendet. Beim folgenden Aufruf funktioniert die Überprüfung der Strukturgleichheit wunderbar:

Code:
Coord c1 = new Coord(17,20);
if(c1.equals(new Coord(17,20)) System.out.println("c1 == (17,20)");

Allerdings kann ich nicht ganz nachvollziehen, warum die equals()-Methode des Coord-Objektes auf die privaten Membervariablen einer anderen Instanz dieser Klasse zugreifen kann.
Kann mich da mal jemand aufklären, was es damit auf sich hat?

Mit freundlichen Grüßen
Data
 
Hallo Matthias,
vielen Dank! Auf sowas wäre ich nie im Leben gekommen. Gut, dass uns unser Professor sowas verschwiegen hat... :-|

Gruss
Data
 
Jedoch ist die equals Methode inhaltlich falsch.

Das Object value wird nicht auf null bzw. auf Coord geprüft, um dann false zurückzugeben. Daher würde dabei eine NullPointerException/ClassCastException fliegen, was nach der Spezifikation zu equals() nicht erlaubt ist. Siehe auch die API von Object dazu.
Z.B.
Java:
if (!(value instanceOf Coord)) {
    return false;
}
Des Weiteren fehlt die hashCode Methode wodurch automatisch, der Vetrag zur hashCode Methode gebrochen wurde. Normalerweise überschreibt man immer beide Methoden.
 

Neue Beiträge

Zurück