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

2.3 KiB

  • Статические вложенные классы
  • Внутренние классы
  • Локальные классы
  • Анонимные классы

Статические вложенные классы

  • Доступ только к статическим полям внешнего класса
  • Не требует экземпляра внешнего класса
  • Логическая группировка классов
class Outer {
	static class Static { }
}
var object = new Outer.Static();

Внутренние классы

  • Доступ ко всем полям внешнего класса
  • Связаны с экземпляром внешнего класса
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
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(); 

Локальные классы

  • Объявляются внутри метода
  • Видимость только внутри метода
  • Нет модификаторов
class Outer {
	void outerMethod() {
		class Local {
			void innerMethod() { }
		}
		Local local = new Local();
		local.innerMethod();
	}
}

Анонимные классы

  • Объявление и создание в одном выражении
  • Отсутствие имени класса
  • Реализация интерфейсов или наследование классов
interface I { void method(); }

I obj = new I() {
	@Override
	public void method() {
		print("Hello");
	}
};
obj.method();

Дополнительно: