Какую роль играют методы класса `java.lang.Object`?

«Какую роль играют методы класса `java.lang.Object`?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Класс Object является корнем иерархии всех классов в Java. Его методы предоставляют базовую, общую для всех объектов функциональность, формируя важные контракты.

Ключевые методы и их назначение:

Метод Назначение Контракт/Важность
boolean equals(Object obj) Сравнение объектов по значению (семантическому равенству). Должен быть согласован с hashCode(): если equals() возвращает true, хеш-коды должны быть равны.
int hashCode() Возвращает целочисленный хеш-код объекта. Критичен для корректной работы hash-коллекций (HashMap, HashSet).
String toString() Возвращает строковое представление объекта. По умолчанию выводит имя класса и хеш-код. Переопределяется для отладки и логирования.
Class<?> getClass() Возвращает объект Class — метаинформацию о классе объекта во время выполнения (Runtime). Используется в рефлексии.
protected Object clone() Создает и возвращает копию объекта. Требует реализации интерфейса Cloneable. Часто предпочтительнее использовать конструкторы копирования.
void wait(), void notify(), void notifyAll() Основы низкоуровневой синхронизации потоков. Используются для организации взаимодействия между потоками. Работают только внутри синхронизированного блока (synchronized).
protected void finalize() Устарел (Deprecated). Вызывался сборщиком мусора перед удалением. Не следует использовать для освобождения ресурсов. Вместо этого используйте try-with-resources или явный close().

Пример переопределения equals и hashCode:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Person person = (Person) o;
    return age == person.age && Objects.equals(name, person.name);
}

@Override
public int hashCode() {
    return Objects.hash(name, age); // Согласованность с equals
}