Наследование не приватных полей, если «не скрыто объявлением в классе» - PullRequest
1 голос
/ 17 июня 2019

Эта фраза из спецификации языка Java 11 (8.3 объявления полей) мне не понятна

Класс наследует от своего прямого суперкласса и прямых суперинтерфейсов все непривилегированные поля суперкласса и суперинтерфейсов, которыеоба доступны (§6.6) для кодирования в классе и не скрыты объявлением в классе .

То есть неясно, является ли имя суперклассаскрыто ли объявлением в классе, означает ли это, что неприватные поля не наследуются?

Часть фразы «и не скрыта объявлением в классе» сбивает с толку.

1 Ответ

0 голосов
/ 17 июня 2019

О, я понял фразу. Проблема в том, что английский не мой родной язык.

Фраза означает, что если поле суперкласса или суперинтерфейса, например, скрыто объявлением подкласса, то согласно Спецификации Java это поле не наследуется. Хотя, на мой взгляд, это выглядит странно.

Но для подтверждения своего вывода я могу привести комментарий к примеру Пример 8.3.1.1-2. Сокрытие переменных класса . Там написано следующее

... потому что объявление x в классе Test скрывает определение x в классе Point, поэтому класс Test не наследует поле x от его Точка суперкласса.

Тем не менее, подкласс Test может получить доступ к скрытому полю класса Point. Таким образом, утверждение, что класс Test не наследует поле x, выглядит странно, например, для программиста на C ++. :)

...