Какова иерархия базовых классов в Java?

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

Ответ

В Java существует единый корень иерархии классов — java.lang.Object. Все классы, для которых не указан явный родитель, неявно наследуются от Object.

Ключевые классы верхнего уровня:

  1. Object — корневой класс. Содержит фундаментальные методы, общие для всех объектов:

    • boolean equals(Object obj) — для логического сравнения объектов.
    • int hashCode() — возвращает хэш-код, должен быть согласован с equals().
    • String toString() — возвращает строковое представление объекта.
    • Class<?> getClass() — возвращает метаинформацию о классе объекта (runtime class).
    • protected Object clone() — создает копию объекта.
    • void wait(), void notify(), void notifyAll() — методы для синхронизации потоков.
  2. Number (абстрактный) — является родителем для всех классов-оберток примитивных числовых типов: Integer, Double, Long, Float, Byte, Short. Предоставляет методы для конвертации в примитивные типы (например, intValue(), doubleValue()).

  3. Throwable — базовый класс для всей иерархии исключений и ошибок. Имеет два основных прямых потомка:

    • Error — указывает на серьезные проблемы, которые приложение не должно пытаться обрабатывать (например, OutOfMemoryError).
    • Exception — исключения, которые приложение может и должно обрабатывать. Включает проверяемые (IOException) и непроверяемые (RuntimeException) исключения.

Пример и демонстрация наследования от Object:

// Класс MyClass неявно наследует Object
class MyClass {
    private int value;
    // Конструктор, геттеры, сеттеры...
}

MyClass obj = new MyClass();
System.out.println(obj.toString()); // Вызовется MyClass.toString() или, если он не переопределен, реализация по умолчанию из Object
System.out.println(obj.getClass().getName()); // Выведет "MyClass"