Главная » Java » Доступ уровня пакета

0

 

   При объявлении классов и интерфейсов верхнего уровня,  принадлежат;11 пакету,   существуют два  альтернативных  варианта  задания   признака  доступа-доступ  на уровне   пакета  и   public.   Класс  или   интерфейс,   объявленный  как public, доступен из любого кода вне пакета. Типы, не обозначенные модификатором public, предлагают возможности доступа на уровне пакета: они открыты любого кода, принадлежащего тому же пакету, но не "видны" из кода, расположенного за пределами пакета или даже относящегося к вложенному пакету. Модификатор  public употребляется в объявлениях только тех типов, которые могут потребоваться пользователям, — все остальные типы, содержащие детали реализации пакета, скрываются от постороннего взгляда. Такой подход обеспечивает гибкие возможности изменения внутренней реализации — пользователи не в состоянии применять "служебные" типы, поскольку не имеют доступа к ним, а вы, не будучи связанными никакими обязательствами в отношении стабильности этих типов, вправе изменять их так, как вам заблагорассудится.

  Член класса, в объявлении которого не содержатся модификаторы public, protected и private, допускает обращение из любого кода внутри пакета, но скрыт для доступа извне. Другими словами, при отсутствии в объявлении члена класса модификаторов доступа ему по умолчанию ставится в соответствие признак доступа уровня пакета — исключение составляют члены интерфейсов, которые всегда получают признак public.

   Поля и методы, не объявленные как private, доступны для любого другого кода внутри пакета. Таким образом, классы внутри пакета, как говорят, обладают дружественными (friendly), или доверительными (trusted), отношениями. Это облегчает задачу построения прикладных программных оболочек, сочетающих в себе фрагменты предопределенного ("жесткого") кода и кода, подлежащего переопределению в производных классах. Предопределенный код сюжет обладать правами доступа уровня пакета по отношению к любому иному коду пакета и, в свою очередь, не допускать обращения из кода за пределами пакета. Вложенные пакеты, однако, не "доверяют" внешним, которым принадлежат, и наоборот. Например, идентификаторы, принадлежащие пакету dit, не доступны для кода вложенного пакета dit.dat, и наоборот.

Можно утверждать, что каждому типу отвечают три различных контракта:

- контракт public, определяющий основные функции типа;

- контракт  protected,   регламентирующий  правила  расширения  функций

базового типа в производных типах для решения специальных задач;

- контракт пакета,  оговаривающий функции,  которые доступны для  взаи

модействующих типов, объявленных в пакете.

Разработка всех трех контрактов требует тщательного и взвешенного подхода.

 

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии