Две мета-точки:
Во-первых, привыкните использовать @Override
каждый раз, когда вы считаете, что переопределяете метод. Это привело бы к тому, что ваш пример кода не скомпилировался, что привело бы к обнаружению проблемы.
Во-вторых, если вы используете IDE, и он не выделил для вас красивое смелое предупреждение, он неправильно настроен! Вы должны это исправить!
И если вы не используете IDE - вам действительно следует это сделать. Как только вы введете public boolean equals(Subclass other)
, цвет текста изменится, и появится предупреждение, сообщающее о вероятной проблеме.
Кстати, стандартная идиома для equals()
, к которой я присоединился, такова:
@Override public boolean equals(Object object) {
if (object instanceof Subclass) {
Subclass that = (Subclass) object;
return this.anInt == that.anInt
&& this.aString.equals(that.aString); // for example
}
return false;
}
В некоторых случаях стоит предвосхищать if (object == this) { return true; }
, но на самом деле не стоит делать из этого привычную привычку.