Введение в Java
Теория: Модуль 8. Урок 1. Nested (static) классы в Java.
Вложенным классом называют класс, который является членом другого класса (находится в его теле). Существует четыре базовых типа вложенных классов в Java:
- Static Nested classes(статические вложенные классы)
- Nested Inner classes (вложенные внутренние классы)
- Method Local Inner classes (внутренние классы в локальном методе)
- Anonymous Inner classes (анонимные классы)

Для чего они нужны?
Вложенными классами описывают типы, которые будут использоваться только в одном классе или вообще будут использованы только один раз (анонимные классы). С помощью этих классов реализовывается необходимость разделить данные и методы их обработки в разные типы (сущности). Сохранив, при этом, инкапсуляцию.
В данном уроке будут рассмотрены только Static Nested classes (статические вложенные классы).
Static Nested classes используются для описания типа, который не должен зависеть от конкретного экземпляра внешнего класса, в который он вложен. Например, билдер — собирает очередной экземпляр внешнего класса и никак с ним больше не взаимодействует.
Как его обозначить в коде?
Static Nested class объявляется как и любой класс, НО внутри тела класса с ключевым словом static. Имена вложенных классов не имеют особых правил.
Static Nested class не имеет привязки к объекту внешнего класса (не хранит в себе ссылку на конкретный экземпляр внешнего класса).
Вложенный класс (Static Nested) имеет доступ к статическим членам своего внешнего класса, в том числе и к закрытым (private), даже без упоминания имени класса.
К НЕстатическим членам внешнего класса Nested(static) класс не имеет прямого доступа. Но такой доступ возможен через объект (экземпляр) внешнего класса, в том числе к закрытым (private) членам внешнего класса.
Вот код-пример:
В свою очередь Nested(static) класс — не совсем прозрачен для внешнего класса. Внешний класс не видит члены Nested(static) класса, без упоминания его имени или объекта. В коде внешнего класса нельзя прямо обратиться к члену вложенного класса.
Соответственно, для обращения к статическим членам вложенного статического класса нужно использовать его имя, а для обращения к НЕстатическим членам вложенного статического класса — нужно использовать имя его экземпляра. При этом, модификаторы доступа не влияют на видимость членов Nested(static) класса, для внешнего класса (private, default (package visible), protected, public).
Код-пример:
Доступ к вложенному классу и его членам, из других классов, ограничивается модификаторами доступа и уровня.
Завершено
0 / 38