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

Внутренний класскласс внутри другого класса.

Некоторая доп. функциональность, которая относиться только к внешнему классу.

Search Icon

Класс внутри другого класса имеет смысл создавать когда внутренний и внешний класс имеют сильную смысловую связь.

Допустим, мы создаём класс Car (машина), и нам нужно описать двигатель этой машины. Логично, что двигатель тесно связан с машиной и не имеет смысла как самостоятельный объект без неё. В таком случае можно определить класс двигателя как внутренний класс внутри класса Car.

Внутренний класс имеет доступ ко всем членам внешнего класса, включая приватные поля. Это ещё больше подчёркивает их взаимосвязь: объект двигателя (внутреннего класса) не существует без объекта машины (внешнего класса).

Соответственно, сначала создаётся объект внешнего класса — машины, а уже на его основе создаётся объект внутреннего класса — двигателя. Это отражает логическую зависимость и облегчает доступ двигателя к данным машины.

Поясним на примере:

class Car { private int carVarible = 100; void print() { //Если во внешнем классе нам нужно //пользоваться внутренним классом //то нужно создать объект внутреннего класса. Motor motor = new Motor(); motor.MotorMethod(); } //Внутренний класс. class Motor { public void MotorMethod() { //Внутренний же класс может обращаться к //элементам внешнего без создания экземпляра System.out.println(carVarible); } } } class InnerClass { public static void main(String[] args) { Car car = new Car(); //Создание внутреннего класса. //Как видим его нельзя создать //без объекта внешнего. Car.Motor motor = car.new Motor(); motor.MotorMethod(); } }

Вывод:

Статический класс

Узнайте, что такое статический класс в Java: его отличия от обычного внутреннего класса, доступ только к статическим полям и примеры использования в OOP.
Time to read: 14

Ссылочные типы и типы значений

Объяснение различий ссылочных типов и типов значений в Java. Как работают объекты и примитивы в памяти? Практические примеры с классами.
Time to read: 12

Передача в метод ссылочных типов и типов значений

Разбираем разницу между передачей в метод примитивов и объектов в Java. Почему объекты изменяются, а примитивы нет? Практические примеры.
Time to read: 9