Ответ
Корневой класс: 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) — наследуют.