HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Вложенным классом называют класс, который является членом другого класса (находится в его теле). Существует четыре базовых типа вложенных классов в Java:</p>
1 <p>Вложенным классом называют класс, который является членом другого класса (находится в его теле). Существует четыре базовых типа вложенных классов в Java:</p>
2 <ul><li>Static Nested classes(статические вложенные классы)</li>
2 <ul><li>Static Nested classes(статические вложенные классы)</li>
3 <li>Nested Inner classes (вложенные внутренние классы)</li>
3 <li>Nested Inner classes (вложенные внутренние классы)</li>
4 <li>Method Local Inner classes (внутренние классы в локальном методе)</li>
4 <li>Method Local Inner classes (внутренние классы в локальном методе)</li>
5 <li>Anonymous Inner classes (анонимные классы)</li>
5 <li>Anonymous Inner classes (анонимные классы)</li>
6 </ul><h2>Для чего они нужны?</h2>
6 </ul><h2>Для чего они нужны?</h2>
7 - <p>Вложенными классами описывают типы, которые будут использоваться только в одном классе или вообще будут использованы только один раз (анонимные классы). С помощью этих классов реализовывается необходимость разделить данные и методы их обработки в разные типы (сущности). Сохранив, при этом, инкапсуляцию.</p>
7 + <p>Вложенными классами описывают типы, которые будут использоваться только в одном классе или вообще будут использованы только один раз (анонимные классы). С помощью этих классов реализовывается необходимость разделить данные и методы их обработки в разные типы (сущности). Сохранив, при этм, инкапсуляцию.</p>
8 <p>В данном уроке будут рассмотрены только Static Nested classes (статические вложенные классы).</p>
8 <p>В данном уроке будут рассмотрены только Static Nested classes (статические вложенные классы).</p>
9 <p>Static Nested classes используются для описания типа, который не должен зависеть от конкретного экземпляра внешнего класса, в который он вложен. Например, билдер - собирает очередной экземпляр внешнего класса и никак с ним больше не взаимодействует.</p>
9 <p>Static Nested classes используются для описания типа, который не должен зависеть от конкретного экземпляра внешнего класса, в который он вложен. Например, билдер - собирает очередной экземпляр внешнего класса и никак с ним больше не взаимодействует.</p>
10 <h2>Как его обозначить в коде?</h2>
10 <h2>Как его обозначить в коде?</h2>
11 <p>Static Nested class объявляется как и любой класс, НО внутри тела класса с ключевым словом<strong>static</strong>. Имена вложенных классов не имеют особых правил.</p>
11 <p>Static Nested class объявляется как и любой класс, НО внутри тела класса с ключевым словом<strong>static</strong>. Имена вложенных классов не имеют особых правил.</p>
12 <p>Static Nested class не имеет привязки к объекту внешнего класса (не хранит в себе ссылку на конкретный экземпляр внешнего класса).</p>
12 <p>Static Nested class не имеет привязки к объекту внешнего класса (не хранит в себе ссылку на конкретный экземпляр внешнего класса).</p>
13 <p>Вложенный класс (Static Nested) имеет доступ к статическим членам своего внешнего класса, в том числе и<em>к закрытым (private)</em>, даже без упоминания имени класса.</p>
13 <p>Вложенный класс (Static Nested) имеет доступ к статическим членам своего внешнего класса, в том числе и<em>к закрытым (private)</em>, даже без упоминания имени класса.</p>
14 <p>К НЕстатическим членам внешнего класса Nested(static) класс не имеет прямого доступа. Но такой доступ возможен через объект (экземпляр) внешнего класса, в том числе к закрытым (private) членам внешнего класса.</p>
14 <p>К НЕстатическим членам внешнего класса Nested(static) класс не имеет прямого доступа. Но такой доступ возможен через объект (экземпляр) внешнего класса, в том числе к закрытым (private) членам внешнего класса.</p>
15 <p>Вот код-пример:</p>
15 <p>Вот код-пример:</p>
16 <p>В свою очередь Nested(static) класс - не совсем прозрачен для внешнего класса. Внешний класс не видит члены Nested(static) класса, без упоминания его имени или объекта. В коде внешнего класса нельзя прямо обратиться к члену вложенного класса.</p>
16 <p>В свою очередь Nested(static) класс - не совсем прозрачен для внешнего класса. Внешний класс не видит члены Nested(static) класса, без упоминания его имени или объекта. В коде внешнего класса нельзя прямо обратиться к члену вложенного класса.</p>
17 <p>Соответственно, для обращения к статическим членам вложенного статического класса нужно использовать его имя, а для обращения к НЕстатическим членам вложенного статического класса - нужно использовать имя его экземпляра. При этом, модификаторы доступа не влияют на видимость членов Nested(static) класса, для внешнего класса (private, default (package visible), protected, public).</p>
17 <p>Соответственно, для обращения к статическим членам вложенного статического класса нужно использовать его имя, а для обращения к НЕстатическим членам вложенного статического класса - нужно использовать имя его экземпляра. При этом, модификаторы доступа не влияют на видимость членов Nested(static) класса, для внешнего класса (private, default (package visible), protected, public).</p>
18 <p>Код-пример:</p>
18 <p>Код-пример:</p>
19 <p>Доступ к вложенному классу и его членам, из других классов, ограничивается модификаторами доступа и уровня.</p>
19 <p>Доступ к вложенному классу и его членам, из других классов, ограничивается модификаторами доступа и уровня.</p>