84 lines
2.2 KiB
Markdown
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();
|
|
```
|
|
|
|
|
|
Дополнительно: [[Интерфейсы#Вложенные интерфейсы|про вложенные интерфейсы]] |