Этот ответ предполагает, что ваш класс выглядит следующим образом:
public class MySuperClass {
int a,b;
}
public class MySubClass extends MySuperClass {
int b;
}
Во-первых, ваши комментарии относительно toString()
не имеют отношения к основным вопросам. В любом случае, ваш код никогда не должен полагаться на реализацию toString - ее вывод только для людей. Не стесняйтесь использовать Super Impl:
public String toString() {
return super.toString() + ", c=" + c;
}
Во-вторых, equals()
должен сравнивать (опубликованное) состояние ваших объектов. Так как у подкласса есть другое поле, ему понадобится свое собственное equals()
. Тем не менее, вы можете использовать метод equals()
суперкласса, например:
public boolean equals(Object o) {
// The super equals() will compare int a and int b for us
if (!super.equals(o)) {
return false;
}
// super thinks it is equal, so let's compare int c
return o instanceof MySubClass && ((MySubClass)o).c == c;
}
В-третьих, hashcode
должен совпадать с равными, так что реализуйте это тоже. Опять же, вы можете использовать impl супер, который хэширует a и b:
public int hashcode() {
return super.hashcode() + new Integer(c).hashCode(); // for example
}