Вложенные классы в Java:
Статические вложенные классы (Static Nested Classes): Ведут себя подобно обычным статическим членам класса. Не имеют доступа к нестатическим членам внешнего класса. Создаются без экземпляра внешнего класса.
java
Внутренние классы (Inner Classes): Связаны с экземпляром внешнего класса. Имеют полный доступ ко всем (static и non-static) членам внешнего класса, включая приватные. Могут быть объявлены private, protected, package-private или public.
java
Локальные классы (Local Classes): Объявляются внутри блока (метода, конструктора или статического инициализатора). Доступны только внутри этого блока. Могут обращаться к final или эффективно final локальным переменным и параметрам блока, а также ко всем членам внешнего класса.
java
Анонимные классы (Anonymous Classes): Являются локальными классами без имени. Используются для одновременного объявления и создания экземпляра класса, который либо реализует интерфейс, либо расширяет класс. Удобны для создания маленьких, однократно используемых объектов.
java
Сравнение видов вложенных классов:
| Тип класса | Место объявления | Доступ к членам внешнего класса | Нужен экземпляр внешнего класса для создания | Модификаторы доступа |
|---|---|---|---|---|
| Статический вложенный | Внутри класса, с ключевым словом static. | Только к статическим. | Нет | Все |
| Внутренний | Внутри класса (не статический). | Ко всем (статическим и нестатическим). | Да | Все |
| Локальный | Внутри блока (методы, конструкторы, инициализаторы). | Ко всем членам внешнего + final/эффективно final локальным. | Да | Нет (final или abstract неявно) |
| Анонимный | Внутри блока (выражение). | Ко всем членам внешнего + final/эффективно final локальным. | Да | Нет |