Суперкласс 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 и поэтому крайне ошибочна.