Back to questions
Junior — Middle
73
Какие отличия существуют между нестационарными и статическими внутренними классами в языке программирования?
Answer from AI
sobes.tech AI
В Java внутренние классы бывают двух основных видов: нестатические (inner classes) и статические вложенные классы (static nested classes). Основные отличия:
-
Нестационарные внутренние классы:
- Не имеют модификатора
static. - Могут обращаться к полям и методам внешнего класса, включая приватные.
- Для создания экземпляра требуется объект внешнего класса.
- Используются, когда внутренний класс логически связан с конкретным экземпляром внешнего.
- Не имеют модификатора
-
Статические вложенные классы:
- Объявлены с модификатором
static. - Не имеют ссылки на экземпляр внешнего класса.
- Не могут обращаться к нестатическим полям и методам внешнего класса напрямую.
- Создаются без необходимости иметь объект внешнего класса.
- Объявлены с модификатором
Пример:
class Outer {
private int outerField = 10;
class Inner {
void print() {
System.out.println("Outer field: " + outerField); // доступ к нестатическому полю
}
}
static class StaticNested {
void print() {
// System.out.println(outerField); // Ошибка, нет доступа к нестатическому полю
System.out.println("Static nested class");
}
}
}
// Создание экземпляров
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
Outer.StaticNested staticNested = new Outer.StaticNested();