Ответ
Корневым родителем для всех классов в Java является класс java.lang.Object.
Ключевые моменты:
- Если класс не указывает явного родителя через ключевое слово
extends, он неявно наследуется отObject. - Даже если класс наследуется от другого, цепочка наследования в итоге ведёт к
Object. - Класс
Objectпредоставляет набор стандартных методов, которые есть у любого объекта:equals()— для сравнения объектов.hashCode()— возвращает хэш-код объекта.toString()— возвращает строковое представление объекта.getClass()— возвращает объект классаClassданного объекта.
Пример:
// MyClass неявно наследуется от Object
class MyClass {
// Поля и методы класса
}
// Это эквивалентно явному наследованию:
class MyClass extends Object {
// Поля и методы класса
}
Исключение: Примитивные типы (int, char, boolean и др.) не являются классами и, соответственно, не наследуются от Object.
Ответ 18+ 🔞
А, слушай, вот это тема, про которую все вроде знают, но потом, блядь, на собеседовании про hashCode() с equals() спрашивают — и тут же пиздец, волнение ебать, в рот меня чих-пых, язык отнимается.
Так вот, смотри. Вся эта твоя Java-вселенная, она, сука, иерархична. И на самом верху, как бог-отец, сидит ёбаный java.lang.Object.
Суть в трёх пунктах, запоминай:
- Ты пишешь
class MyClass { ... }и думаешь, что ты независимый гений? Хуй там! Твой класс автоматом, неявно, по умолчанию наследуется отObject. Это как налоги — от них не отвертишься. - Даже если твой класс уже от кого-то наследуется (
extends SuperClass), то его родитель, в свою очередь, тоже от кого-то наследуется. И эта цепочка, блядь, как матрёшка, всегда-всегда упирается вObject. Он — корень, пиздец, альфа и омега. - А зачем он, этот
Object? А затем, что он даёт каждому объекту стандартный набор пиздюлей... то есть, методов! Без них никуда:equals()— чтобы сравнивать, один ли это объект или два разных, но с одинаковыми полями. А то==нихуя не всегда работает как надо.hashCode()— эта, блядь, магическая цифра, которая должна быть связана сequals(). Забудешь про связь — вHashMapтвой объект потеряется нахуй навсегда.toString()— чтобы при выводе в консоль было неMyClass@a1b2c3, а что-то человекочитаемое. Ну, если переопределишь, конечно.getClass()— чтобы узнать, под какой, блядь, личиной этот объект пришёл.
Пример, чтобы совсем доехало:
// Пишешь так, спокойно
class MyClass {
int value;
}
// А Java видит это так, ёпта:
class MyClass extends Object {
int value;
}
// И теперь у каждого экземпляра MyClass есть методы от дедушки Object. Всё, приехали.
Важный нюанс, блядь! Примитивные типы вроде int, char — это не объекты, это так, голые данные. Они от Object нихуя не наследуются. Они как дикари в цивилизованном мире объектов. Но для них есть обёртки (Integer, Character), вот они-то — полноценные объекты и внуки того самого Object. Вот такая, блядь, хитрая жопа.