Главная » Java » Статические вложенные классы Java

0

 

 

Статический вложенный класс – это простейшая форма вложенного класса; в его объявлении присутствует служебное слово static. Если Класс вложен в интерфейс, он получает статус статического по умолчанию, и Модификатор statiс, в соответствии с приняты м соглашением, опускается. Статический вложенный класс ведет себя в точности так же, как и заурядный класс "верхнего" уровня. Он способен наследовать другие классы, реализовывать любые Интерфейсы и сам по себе служить объектом расширения для любого Класса, обладающего необходимыми правами доступа. В объявлении статического вложенного класса, как и обычного класса, разрешается применять модификаторы final и abstract

Статические вложенные классы служат в качестве механизма определения логически связанных типов внутри контекста, в котором эти типы имеют смысл. Например, в разделе 2.6.3 на странице 75 мы продемонстрировали Класс Permissions, предназначенный для хранения информации об объекте класса BankAccount, представляющего банковский счет. поскольку Класс Permissions связан с BankAccount Класса BankAccount – объект типа Permissions подтверждает права владельца банковского счета на выполнение тех или иных операций, – его можно считать удачным кандидатом на роль вложенного класса:

Класс Permissions определен внутри объявления класса BankAccount и является членом последнего. Когда метод Permissions класса BankAccount возвращает объект типа Permissions, метод может обращаться к классу просто по Permissions – точно так же, как к полям number и balanсе, без дополнительных уточнений: не будем забывать, что Permissions – это полноправный член класса. имя вложенного Класса Permissions выглядит как BankAccount. Permissions и ясно свидетельствует, что этот класс является частью класса BankAccount, а не самостоятельным типом. Код за пределами класса BankAccount обязан обращаться к вложенному типу с указанием его полного имени

BankAccount. Permissions реrm = acct. PermissionsFor(owner);

Если бы класс BankAccount размещался в пакете с именем bank, полным наименованием вложенного класса было бы bank. BankACcount. Регт; 55; ОП5 (более полные сведения о пакетах приведены в главе 13). Решая прикладную задачу, можно импортировать класс BankAccount. Permissions и далее обращаться к нему, употребляя простое имя Permissions, но в таком случае важная информация о "подчиненном" характере класса будет утрачена.

Статические классы, вложенные в другой класс, являются членами последнего и допускают применение любых модификаторов доступа, которые уместны в конкретных обстоятельствах. Вы вправе, например, оговорить, что класс служит внутренним атрибутом реализации внешнего класса, и объявить его как ргivate. Класс Permissions, однако, объявлен как public и поэтому открыт для доступа из Прикладных программ, использующих класс BankAccount.

Поскольку Permissions – член класса BankAccount, он способен обращаться ко всем другим членам BankAccount, включая и унаследованные. Если бы, например, в составе Permissions был объявлен метод, предусматривающий прием объекта BankAccount в виде аргумента, такой метод обладал бы правом непосредственного доступа к полям number и bаlаnсе объекта BankAccount. В этом смысле вложенный класс выглядит как часть реализации внешнего класса и поэтому заслуживает полного доверия

Не существует каких-либо ограничений, связанных с возможностью расширения вложенного статического класса, – класс может быть наследован любым другим Классом, обладающим необходимыми правами доступа. При этом, разумеется, производный класс не способен унаследовать те привилегии доступа к Членам внешнего класса, которыми наделен вложенный класс.

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

По теме:

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