В объектно-ориентированном программировании (ООП) внутренний класс или вложенный класс — это класс, полностью объявленный внутри тела другого класса или интерфейса. Он отличается от подкласса .
Экземпляр обычного класса или класса верхнего уровня может существовать сам по себе. Напротив, экземпляр внутреннего класса не может быть создан без привязки к классу верхнего уровня.
Возьмем абстрактное понятие a Car
с четырьмя Wheel
s. У наших Wheel
s есть особая функция, которая зависит от того, являются ли они частью нашего Car
. Это понятие не представляет Wheel
s как Wheel
s в более общей форме, которая могла бы быть частью любого транспортного средства. Вместо этого он представляет их как специфичные для файла Car
. Мы можем смоделировать это понятие, используя внутренние классы следующим образом:
У нас есть класс высшего уровня Car
. Экземпляры класса Car
состоят из четырех экземпляров класса Wheel
. Эта конкретная реализация Wheel
специфична для автомобиля, поэтому код не моделирует общее понятие колеса, которое лучше было бы представить как класс верхнего уровня. Следовательно, он семантически связан с классом Car
, а код Wheel
каким-то образом связан с его внешним классом, являясь составной единицей автомобиля. Колесо конкретного автомобиля уникально для этого автомобиля, но в общем случае колесо является агрегатной единицей автомобиля.
Внутренние классы предоставляют механизм для точного моделирования этого соединения. Мы можем называть наш Wheel
класс Car.Wheel
, Car
будучи классом верхнего уровня и Wheel
внутренним классом.
Таким образом, внутренние классы допускают объектную ориентацию определенных частей программы, которые в противном случае не были бы инкапсулированы в класс.