Recall from the end of question 5235 that you have implemented equals
in a manner that
is asymmetric in the presence of subclasses: you constructed a Point
p
and a ColouredPoint
cp
such that p.equals(cp)
holds, but cp.equals(p)
does not.
Think for a while about how to make equals
work symmetrically in the
presence of subclasses. If you manage to find an elegant working solution you should feel very happy, as this
confounded Object Oriented Programming practitioners for some time! If you get stuck, then look at this excellent
article on writing equality methods in Java:
The tutorial describes the "can equal" approach to defining equals
in the presence of subclasses.
This is the approach taken by the Scala programming language. There is a Java school of thought that believes that
one should not override equals
for classes that may have subclasses. According to this school of thought,
what are the only kinds of classes for which equals
should be overridden?