Java для начинающих: Вложенные и анонимные классы

Вложенные классы

Вложенные классы — это классы, объявленные внутри другого класса. Ранее мы создавали каждый класс в отдельном файле. Вложенные классы позволяют разместить один класс внутри другого, в одном файле.

Зачем нужны вложенные классы?

Рассмотрим пример: класс Компьютер, содержащий Процессор и RAM память. Эти компоненты неотъемлемо связаны с компьютером, поэтому логично разместить их классы внутри класса Компьютер. Это отличается от отношения между классами Человек и Студент, где связь менее тесная.

class Компьютер {
    private class Процессор {
        private boolean isStart = false;

        public void Start() {
            isStart = true;
        }

        public void Shutdown() {
            isStart = false;
        }
    }

    private class Ram {
        private boolean isStart = false;

        public void Start() {
            isStart = true;
        }

        public void Shutdown() {
            isStart = false;
        }
    }

    public static void main(String[] args) {
        Компьютер comp = new Компьютер();
        Процессор i7 = comp.new Процессор();
        Ram transfer = comp.new Ram();

        i7.Start();
        transfer.Start();

        System.out.println("i7.isStart = " + i7.isStart);
        transfer.Shutdown();
        System.out.println("transfer.isStart = " + transfer.isStart);
    }
}

Переменные isStart объявлены как private. Доступ к ним осуществляется только через методы класса. Это предотвращает прямое изменение состояния процессора или памяти извне класса Компьютер.

Мы создаем объекты классов Процессор и RAM внутри класса Компьютер и используем их методы для управления состоянием компонентов. Это демонстрирует принцип инкапсуляции и улучшает организацию кода.

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

Использование анонимных классов оправдано, когда:

  • Тело класса очень короткое.
  • Необходим только один экземпляр класса.
  • Класс используется в месте своего создания или сразу после.
  • Имя класса не важно и не улучшает читаемость кода.

Анонимные классы не имеют имени. Они объявляются и создаются одновременно.

new Компьютер() {
    public void superCom() {
        this.i7.Start();
        this.transfer.Start();
    }
};

В данном примере создается анонимный класс, и сразу же создается его объект. В нем содержится один метод superCom, который вызывает методы Start у объектов i7 и transfer. Это удобно для кратких классов одноразового использования. Обратите внимание на точку с запятой после закрывающей фигурной скобки.

Вложенные и анонимные классы — гибкие инструменты для организации кода в Java. Выбор между ними зависит от контекста и сложности задачи. Вложенные классы полезны для организации логически связанных компонентов, а анонимные — для кратких, одноразовых классов.

(Примечание: В примере кода используются кириллические имена классов и методов. Для большей читаемости и соответствия стандартам Java рекомендуется использовать латинские названия.)

Что будем искать? Например,программа