Ответ
Класс Object — корень иерархии классов в Java. Его методы есть у всех объектов. Вот ключевые из них, которые важно понимать для написания корректного кода и для собеседований:
equals(Object obj)— определяет логическое равенство объектов (по умолчанию сравнивает ссылки==). Всегда переопределяется вместе сhashCode().hashCode()— возвращает целочисленный хэш-код объекта. Используется в хэш-коллекциях (HashMap,HashSet). Контракт: если два объекта равны поequals(), их хэш-коды должны быть равны.toString()— возвращает строковое представление объекта. По умолчанию выводит имя класса и хэш-код. Часто переопределяется для удобства отладки и логирования.getClass()— возвращает объект классаClassданного объекта во время выполнения (runtime). Используется в рефлексии.wait(),notify(),notifyAll()— методы для синхронизации потоков (низкоуровневый механизм). Используются внутриsynchronizedблоков.clone()— создает и возвращает копию объекта. Класс должен реализовывать интерфейсCloneable. Использование требует осторожности (поверхностное/глубокое копирование).finalize()— устаревший метод, вызываемый сборщиком мусора перед удалением объекта. Не рекомендуется к использованию.
Пример переопределения equals() и hashCode() (важно для тестирования и коллекций):
public class User {
private final Long id;
private final String email;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return Objects.equals(id, user.id); // Сравниваем только по ID
}
@Override
public int hashCode() {
return Objects.hash(id); // Хэш тоже вычисляем только по ID
}
}
Для QA/автотестов: Понимание этих методов критично, когда вы пишете кастомные ассерты или работаете с коллекциями объектов в тестах. Неправильная реализация equals/hashCode может привести к некорректному поведению HashSet или HashMap в тестовых данных.