Files
obsidian/Программирование на Java/ООП/Вложенные классы.md
T
roma-dxunvrs 8fda05110c 07.09.26
2026-09-07 23:26:20 +03:00

84 lines
2.2 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();
```
## Локальные классы
- Объявляются внутри метода
- Видимость только внутри метода
- Нет [[Модификаторы|модификаторов]]
```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();
```
Дополнительно: [[Интерфейсы#Вложенные интерфейсы|про вложенные интерфейсы]]