Суперкласс Java Object - PullRequest
       12

Суперкласс Java Object

12 голосов
/ 25 апреля 2010

У меня странный вопрос на Java:

Как мы знаем:

  1. Все классы Java расширяются java.lang.Object
  2. Все классы Java не могут расширяться

Тогда java.lang.Object должен расширить java.lang.Object, что само по себе, следовательно, это должно быть невозможно. Как объект реализован в Java?

Ответы [ 3 ]

20 голосов
/ 25 апреля 2010

Object является исключением из первого правила и не имеет суперкласса. От JLS3 8.1.4 :

Предложение extends не должно появляться в определении класса Object, потому что это первичный класс и не имеет прямого суперкласса.

Вы также можете попробовать это с отражением:

Object.class.getSuperclass(); // returns null
1 голос
/ 25 апреля 2010

Вам лучше подумать об этом как:

  1. Все классы java должны реализовывать интерфейс, подразумеваемый методами в java.lang.Object.
  2. Конкретный класс java.lang.Object предоставляет реализации этих функций по умолчанию.
  3. Все остальные классы Java являются производными от объекта java.lang.Object и могут выбрать использование или переопределение реализаций методов по умолчанию.

Два основных момента: все классы должны реализовывать подразумеваемый интерфейс, и спецификация языка Java дает вам (заставляет вас?) Реализации по умолчанию для этих методов бесплатно.

0 голосов
/ 25 апреля 2010

Объект не расширяется. Это суперкласс для всех других объектов в языке Java. Думайте об этом как о классе уровня 0 (или корне) всех объектов в дереве API Java, включая любые объекты, которые вы создаете.

Я также хочу отметить, что ваш вопрос оказался невозможным по правилу № 2, которое вы опубликовали. Ваша логика, использованная для обоснования вашего вопроса, принимает во внимание только # 1 и поэтому чрезвычайно ошибочна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...