...
Code Block | ||
---|---|---|
| ||
public class Card { private final int number; public Card(int number) { this.number = number; } public boolean equals(Object o) { if (!(o instanceof Card)) return false; Card c = (Card)o; return c.number == number; } } class XCard extends Card { private String type; private Card card; public XCard(int number, String type) { super(number); this.type = type; } public Card viewCard() { return card; } public boolean equals(Object o) { if (!(o instanceof XCard)) return false; XCard cp = (XCard)o; return cp.card.equals(card) && cp.type.equals(type); } public static void main(String[] args) { XCard p1 = new XCard(1, "type1"); Card p2 = new Card(1); XCard p3 = new XCard(1, "type2"); System.out.println(p1.equals(p2)); //returns false System.out.println(p2.equals(p3)); //returns false System.out.println(p1.equals(p3)); //returns false } } |
Exceptions
EX1: There is no need to override equals
if checking logical equality is not useful. Enum types are an example.
EX2: If a subclass inherits an implementation of equals
from a superclass and does not need additional functionality, one can forgo overriding equals()
.
Risk Assessment
Violating the general contract when overriding the equals()
method can lead to unexpected results.
...