Суперкласс Java Object
У меня странный вопрос Java:
Как известно:
- Все классы Java расширяются
java.lang.Object
- Все классы Java не могут распространяться
Тогда java.lang.Object
должен расширять java.lang.Object
, что само по себе, поэтому это должно быть невозможно. Как реализован объект на Java?
Ответы
Ответ 1
Object
является исключением из первого правила и не имеет суперкласса. Из JLS3 8.1.4:
Предложение extends не должно появляться в определении класса Object, поскольку оно является первородным классом и не имеет прямого суперкласса.
Вы также можете попробовать с отражением:
Object.class.getSuperclass(); // returns null
Ответ 2
Вам лучше подумать об этом как:
- Все классы Java должны реализовывать интерфейс, подразумеваемый методами в java.lang.Object.
- Конкретный класс java.lang.Object предоставляет стандартные реализации этих функций.
- Все остальные классы Java производятся из объекта java.lang.Object и могут использовать или переопределять стандартные реализации методов.
Два основных момента: все классы должны реализовывать подразумеваемый интерфейс, а спецификация языка Java дает вам (силы на вас?) реализации по умолчанию для этих методов бесплатно.
Ответ 3
Объект не распространяется. Это суперкласс для всех других объектов на языке Java. Подумайте, что это класс уровня 0 (или root) всех объектов в дереве API Java, включая любые объекты, которые вы создаете.
Я также хочу указать, что ваш вопрос доказан невозможным по правилу № 2, который вы опубликовали. Ваша логика, используемая для обоснования вашего вопроса, учитывает только № 1 и поэтому крайне ошибочна.