Sobes.tech
Назад к вопросам
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 важно:

  1. Проверить, что объект сравнения не null и принадлежит тому же классу (или совместимому).
  2. Вызвать super.equals(obj), чтобы сравнить поля родительского класса.
  3. Сравнить поля самого 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 аналогично, чтобы сохранить консистентность.