Ответ
Класс 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
}