Ansicht umschalten
Avatar von jannekk
  • jannekk

308 Beiträge seit 23.08.2011

Re: Typsicheres Vergleichen

> Wie bitteschön soll sich Vererbung auf einen Vergleich von Objekten
> *gleichen Typs* auswirken? Und was hat das mit Java zu tun, wo man
> den Vergleichsoporator gar nicht überschreiben, geschweige vererben
> kann?

Ok, ich war nicht genau genug. der Vergleichsoperator kann in Java
*nicht* überschrieben werden (Echt schade da ein Vergleich auf die
selbe Referenz zu 90% unnütz ist).

Problem ist das Vergleiche (in Java dann mit a.equals(b)) nicht
typsicher und nicht trivial sind. Z.B:
   "Ich bin ein String".equals(112) == false
Mag zwar "richtig" sein, ist aber nicht typsicher da 112 niemals ein
String ist. Folgendes zeigt das "Problem" das bei Vererbung entstehen
kann.  

class Point {
 public int x;
 public int y;

 public boolean equals(Object other) {
 if (other instanceof Point) {
 Point op = (Point)other;
 return this.x == op.x && this.y == op.y;
 }
 return false;
 }
}

class ColoredPoint extends Point {
 public int color;
 public boolean equals(Object other) {
 if (other instanceof ColoredPoint) {
 ColoredPoint op = (ColoredPoint)other;
 return this.x == op.x && this.y == op.y && this.color == op.color;
 }
 return false;
 }
}

Point p1 = new Point();
p1.x = 1;
p1.y = 1;

ColoredPoint p2 = new  ColoredPoint();
p2.x=1;
p2.y=1;

System.out.println(p1.equals(p2)); // true
System.out.println(p2.equals(p1)); // false

Also auch in Java kann man ziemlich leicht unsinnige Vergleiche
anstellen.

Jetzt klar was ich meine?


Bewerten
- +
Ansicht umschalten