...sondern so:
public boolean equals (Object o) {
  if (! (o instanceof C)) return false;
  C that = (C) o;
  return this.x == that.x && this.y == that.y;
}
Die Methode boolean equals(Object o) 
wird aus HashSet aufgerufen.  
Sie muß deswegen überschrieben werden.
Das boolean equals (C that) hat 
den  Methodenamen nur überladen.