Назад к вопросам
СБЕР
Senior
8
@Data public class ClassA { int a; } public class ClassB extends ClassA { int b; @Override public boolean equals(Object obj) { //реализация } } @Data public class ClassA { int a; } public class ClassB extends ClassA { int b; @Override public boolean equals(Object obj) { //реализация if (this == obj) return true; if (!obj instanceof ClassB) return false; if (!super.equals(obj)) return false; } }
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
В данном примере класс ClassA помечен аннотацией @Data (Lombok), которая генерирует equals, hashCode, toString и другие методы на основе полей класса.
Класс ClassB наследует ClassA и переопределяет метод equals. В реализации equals важно:
- Проверить, что объект сравнения не null и принадлежит тому же классу (или совместимому).
- Вызвать super.equals(obj), чтобы сравнить поля родительского класса.
- Сравнить поля самого ClassB.
Пример корректной реализации equals в ClassB:
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (!(obj instanceof ClassB)) return false;
if (!super.equals(obj)) return false;
ClassB other = (ClassB) obj;
return b == other.b;
}
Это гарантирует, что сравнение учитывает поля и родителя, и потомка, избегая ошибок и нарушений контракта equals.
Важно также переопределить hashCode аналогично, чтобы сохранить консистентность.