Как класс Object в Java отражает принципы ООП?

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

Ответ

Класс java.lang.Object является корнем иерархии классов в Java, что делает его фундаментальным воплощением принципов объектно-ориентированного программирования.

Принципы ООП, реализуемые через Object:

  1. Наследование (Inheritance): Все классы в Java неявно наследуются от Object. Это обеспечивает единый базовый контракт.
  2. Полиморфизм (Polymorphism): Ключевые методы Object (например, equals(), hashCode(), toString()) предназначены для переопределения в дочерних классах, что позволяет изменять их поведение.
  3. Абстракция (Abstraction): Object предоставляет общий интерфейс для работы с любым объектом (например, через ссылку типа Object).
  4. Инкапсуляция (Encapsulation): Object инкапсулирует базовую логику работы с объектами (синхронизация через wait()/notify(), получение класса через getClass()).

Практический пример переопределения:

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

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return id == person.id; // Сравнение по бизнес-логике (id)
    }

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

Best Practice: Всегда переопределяйте equals() и hashCode() согласованно, если планируете использовать объекты в коллекциях на основе хэша (HashMap, HashSet).