Files
obsidian/Программирование на Java/ООП/Вложенные классы.md
T
roma-dxunvrs 0e6e583e6d
deploy / Pull and Restart (push) Successful in 17s
refactor: wiki links -> md links
2026-09-22 08:52:23 +03:00

84 lines
2.3 KiB
Markdown

- Статические вложенные классы
- Внутренние классы
- Локальные классы
- Анонимные классы
## Статические вложенные классы
- Доступ только к статическим полям внешнего класса
- Не требует экземпляра внешнего класса
- Логическая группировка классов
```Java
class Outer {
static class Static { }
}
var object = new Outer.Static();
```
## Внутренние классы
- Доступ ко всем полям внешнего класса
- Связаны с экземпляром внешнего класса
```Java
class Outer {
private int field;
class Inner {
public int getOuterField() {
return field;
}
}
}
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
print(inner.getOuterField());
```
## Классы, вложенные в интерфейс
- По умолчанию `public static`
```Java
public interface Vehicle {
void start();
class Engine {
private int horsepower;
public Engine(int horsepower) {
this.horsepower = horsepower;
}
public void roar() {
System.out.println("Roar");
}
}
}
Vehicle.Engine myEngine = new Vehicle.Engine(150);
myEngine.roar();
```
## Локальные классы
- Объявляются внутри метода
- Видимость только внутри метода
- Нет [модификаторов](Инкапсуляция/Модификаторы.md)
```Java
class Outer {
void outerMethod() {
class Local {
void innerMethod() { }
}
Local local = new Local();
local.innerMethod();
}
}
```
## Анонимные классы
- Объявление и создание в одном выражении
- Отсутствие имени класса
- Реализация интерфейсов или наследование классов
```Java
interface I { void method(); }
I obj = new I() {
@Override
public void method() {
print("Hello");
}
};
obj.method();
```
Дополнительно: [](Интерфейсы.md#Вложенные%20интерфейсы|про%20вложенные%20интерфейсы)