Назад к вопросам
Middle
66
questionbank
В чем различия между вложенными (nested) классами и внутренними (inner) классами в Java?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
-
Вложенные классы (Nested classes): Статические члены внешнего класса. Не имеют доступа к нестатическим членам (полям и методам) внешнего класса напрямую, только через экземпляр внешнего класса. Объявляются с ключевым словом
static. -
Внутренние классы (Inner classes): Нестатические члены внешнего класса. Имеют полный доступ ко всем членам (статическим и нестатическим) внешнего класса, включая приватные. Для создания экземпляра внутреннего класса нужен экземпляр внешнего класса. Не используют ключевое слово
static.
Пример:
// Внешний класс
class Outer {
private int outerField = 10;
private static int staticOuterField = 20;
// Статический вложенный класс
static class StaticNestedClass {
void display() {
// Доступ только к статическим членам внешнего класса
System.out.println("Static nested: " + staticOuterField);
// Нет прямого доступа outerField
// System.out.println(outerField); // Ошибка компиляции
}
}
// Нестатический внутренний класс
class InnerClass {
void display() {
// Доступ ко всем членам внешнего класса
System.out.println("Inner: " + outerField);
System.out.println("Inner (static): " + staticOuterField);
}
}
}
// Использование
public class Main {
public static void main(String[] args) {
// Создание экземпляра статического вложенного класса
Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
staticNested.display();
// Создание экземпляра внутреннего класса требует экземпляра внешнего класса
Outer outer = new Outer();
Outer.InnerClass inner = outer.new InnerClass();
inner.display();
}
}
| Особенность | Вложенный класс (Nested Class) | Внутренний класс (Inner Class) |
|---|---|---|
| Ключевое слово | static |
Нет |
| Доступ к членам внешнего класса | Только статические | Все |
| Требует экземпляр внешнего класса для создания экземпляра | Нет | Да |
| Связь с экземпляром внешнего класса | Нет | Да |