Какой класс является корневым родителем для всех классов в Java?

Ответ

Корневой класс: java.lang.Object — это неявный суперкласс для всех классов Java, кроме примитивных типов и массивов (хотя массивы тоже являются объектами).

Почему это важно: Наследование от Object обеспечивает единую базовую функциональность для всех объектов в системе.

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

Метод Назначение Переопределение
String toString() Возвращает строковое представление объекта. Часто (для логирования, отладки).
boolean equals(Object obj) Определяет логическое равенство объектов. Часто (вместе с hashCode()).
int hashCode() Возвращает хэш-код для поддержки хэш-коллекций (HashMap, HashSet). Обязательно при переопределении equals().
Class<?> getClass() Возвращает объект Class — метаинформацию о типе объекта во время выполнения (Runtime). Практически никогда.
protected Object clone() Создает и возвращает копию объекта. Иногда (требует реализации Cloneable).
protected void finalize() Вызывается сборщиком мусора перед удалением. Устарел с Java 9. Избегать.
void wait(), void notify(), void notifyAll() Базовые методы для межпоточной синхронизации. Редко (лучше использовать java.util.concurrent).

Пример неявного наследования:

public class MyClass { 
    // Компилятор автоматически добавляет: extends Object
}

// Проверка:
MyClass obj = new MyClass();
System.out.println(obj instanceof Object); // true
System.out.println(obj.getClass().getSuperclass()); // class java.lang.Object

Исключения: Примитивные типы (int, char и т.д.) не являются классами и не наследуют Object. Однако их классы-обертки (Integer, Character) — наследуют.

Ответ 18+ 🔞

Да ты посмотри, какой подвох-то, ёпта! Все эти твои классы в Java, они как будто в секте состоят — у них у всех один тайный папаша, java.lang.Object. Ну, кроме примитивов, те — как деревенские дурачки, не в теме. Хотя массивы — те тоже объекты, хитрая жопа!

Вот смотри, зачем этот Object всем сдался, этот старый пердун:

Чё он всем раздаёт, этот корневой класс:

Метод На чё годится Часто ли его переписывают?
String toString() Чтобы объект в строку превратить, посмотреть, что внутри. Да, постоянно! Для отладки, чтоб в логах не MyClass@a1b2c3 светилось, а что-то человеческое.
boolean equals(Object obj) Чтобы понять, один объект равен другому или нет. Не по ссылке, а по смыслу. Очень часто! Но только вместе с hashCode(), а то пидарасы налетят в виде багов.
int hashCode() Циферка для быстрого поиска в HashMap и HashSet. ОБЯЗАТЕЛЬНО, если equals переписал. Иначе коллекции ебут мозг и ничего не находят.
Class<?> getClass() Выдаёт паспорт объекта — метаинфу, кто он такой во время работы программы. Практически никогда. Это как спросить у человека "Ты кто?", а он тебе в ответ паспорт суёт.
protected Object clone() Сделать копию объекта. Иногда. Но там надо Cloneable реализовать, а это отдельная песня про говно и палки.
protected void finalize() Вызывается перед смертью объекта, когда мусорщик приходит. Устарел, как ламповый телевизор! С Java 9 — забудь. Избегать, как чумы. Ненадёжный он, вротберунчик.
void wait(), void notifyAll() и т.д. Чтоб потоки между собой договаривались. Редко. Нынче моднее из java.util.concurrent инструменты брать, они поумнее.

Вот, смотри, как это в коде выглядит, блядь:

public class MyClass { 
    // Компилятор сам, сука, шепчет: extends Object
}

// Проверяем, не пиздят ли нам:
MyClass obj = new MyClass();
System.out.println(obj instanceof Object); // true, ёбана!
System.out.println(obj.getClass().getSuperclass()); // class java.lang.Object — вот он, родимый!

А примитивы (int, char) — те вообще не в этой системе, они как бы вне игры. Но их обёртки (Integer, Character) — те уже полноправные члены клуба, наследуют от Object. Вот такой, блядь, расклад, ебать мои старые костыли!