Skip to content

Latest commit

 

History

History
42 lines (30 loc) · 1.67 KB

5235.md

File metadata and controls

42 lines (30 loc) · 1.67 KB

Back to questions

Solution to 5235: Equality between points

See code at solutions/code/tutorialquestions/question5235

With a plain old Point class, before overriding equals, you should find that comparing identical points represented by distinct objects with equals yields false. DemoWithoutEquals.java gives an example of this.

Implementing equals for points is straightforward using the recipe given in the lectures. See pointequality/Point.java for the implementation.

The main method in pointequality/PointEqualityDemo.java shows that having overridden equals for Point, we now have a problem with ColouredPoint. Declaring:

ColouredPoint cp = new ColouredPoint(1.2, 2.3, 3.4, Colour.Red);
ColouredPoint cq = new ColouredPoint(1.2, 2.3, 3.4, Colour.Blue);

we find that cp.equals(cq) holds, even though these points have different colours.

To fix this, you were asked to override equals in ColouredPoint. Look at colouredpointequality/ColouredPoint.java to see how this can be done. Most interesting is the last line of the equals method:

return super.equals(thatPoint) && colour == thatPoint.colour;

Notice that super is used to check first whether the coloured points are equal when regarded as plain old points. Additionally, for them to be regarded as equal as coloured points, their colours must match.

Finally, the asymmetry of equals is illustrated in colouredpointequality/PointEqualityDemo.java: the last thing main prints is:

Points p = (1.2, 2.3, 3.4) and cp = ((1.2, 2.3, 3.4), Red) are equal
Points cp = ((1.2, 2.3, 3.4), Red) and p = (1.2, 2.3, 3.4) are not equal