Выбор ответа Middle ООП и класс Object обновлено

equals(Point) вместо equals(Object)

Вопрос

В классе Point объявлен метод public boolean equals(Point other). Что вернёт List.of(new Point(1, 2)).contains(new Point(1, 2))?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: false: contains вызывает equals(Object), а это перегрузка. contains внутри вызывает o.equals(e) с аргументом типа Object.

Варианты ответа

  1. true: вызовется более точный метод equals(Point)
  2. Ошибка компиляции: метод equals нельзя перегружать
  3. false: contains вызывает equals(Object), а это перегрузкаправильный ответ
  4. true, если вместе с equals переопределить и hashCode

Разбор

contains внутри вызывает o.equals(e) с аргументом типа Object. Метод equals(Point) имеет другую сигнатуру и не переопределяет Object.equals, поэтому работает унаследованное сравнение ссылок: false. Аннотация @Override сразу показала бы ошибку. Перегружать equals формально можно, но бессмысленно. hashCode тут ни при чём: List.contains его не использует.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.