Java: модификатор доступа более строгий, чем «защищенный», менее строгий, чем «частный»? - PullRequest
5 голосов
/ 12 сентября 2009

Я хочу что-то похожее на protected, где только класс, который реализует поле protected и все, что подклассы, он может получить к нему доступ.

Итак, я хочу иметь возможность объявить переменную в базовом классе как private, но при этом иметь возможность доступа к ней из подкласса.

Возможно, это противоречит самой природе подклассов, private и / или protected.

Существует ли что-то подобное в Java?

Ответы [ 4 ]

10 голосов
/ 12 сентября 2009

В Java есть только четыре уровня доступа к полям:

  • private
  • package-private (по умолчанию; без модификатора доступа)
  • protected
  • public

protected позволит подклассам, другим классам в том же пакете и членам самого класса получать доступ к члену protected.

Краткий ответ: нет способа достичь именно того, что нужно.

Описание этих четырех модификаторов доступа: Управление доступом к членам класса из Учебные руководства Java содержат более конкретную информацию.

2 голосов
/ 12 сентября 2009

Если вы управляете кодовой базой, вы всегда можете контролировать то, что входит в пакет с базовым классом - если он один в своем пакете, только подклассы могут получить доступ к элементу, который вы хотите сохранить в секрете, за исключением подклассов.

1 голос
/ 12 сентября 2009

Нет, нет модификатора доступа , чтобы сделать именно это. Модификатор protected является наиболее близким, но он предоставляет поле любому классу в том же пакете, а также подклассам (внутри или из одного пакета).

0 голосов
/ 30 октября 2014

Не возможно. Вы все еще можете объявить ваши переменные как частные, а затем объявить открытые методы, которые изменяют переменные в суперкласс. Затем вы вызываете открытый метод для переменной.

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