Какова роль класса Object в Java?

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

Ответ

Класс Object — это корневой суперкласс для всех классов в Java. Он предоставляет базовые методы, которые определяют общее поведение для всех объектов.

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

  • equals(Object obj) — сравнивает объекты на равенство. Реализация по умолчанию (==) проверяет равенство ссылок.
  • hashCode() — возвращает целочисленный хеш-код объекта. Критически важен для корректной работы коллекций, основанных на хеше (например, HashMap, HashSet). Контракт между equals() и hashCode() требует, чтобы равные объекты имели одинаковый хеш-код.
  • toString() — возвращает строковое представление объекта. По умолчанию выводит имя класса и хеш-код.
  • getClass() — возвращает объект Class, представляющий тип объекта во время выполнения.
  • clone() — создает и возвращает копию объекта. Требует реализации интерфейса Cloneable.
  • finalize() — устаревший метод, вызываемый сборщиком мусора перед удалением объекта (не рекомендуется к использованию).
  • wait(), notify(), notifyAll() — методы для синхронизации потоков.

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

public class Person {
    private String name;
    private int age;

    @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);
    }
}

Переопределяя эти методы, вы можете задать семантику равенства и эффективную работу в хеш-коллекциях для своих классов.