Выбор ответа 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.
Варианты ответа
true: вызовется более точный методequals(Point)- Ошибка компиляции: метод
equalsнельзя перегружать false:containsвызываетequals(Object), а это перегрузкаправильный ответtrue, если вместе с equals переопределить иhashCode
Разбор
contains внутри вызывает o.equals(e) с аргументом типа Object. Метод equals(Point) имеет другую сигнатуру и не переопределяет Object.equals, поэтому работает унаследованное сравнение ссылок: false. Аннотация @Override сразу показала бы ошибку. Перегружать equals формально можно, но бессмысленно. hashCode тут ни при чём: List.contains его не использует.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.