Что такое анонимный класс в Java?

«Что такое анонимный класс в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Анонимный класс в Java — это локальный класс без имени, который объявляется и создается в одном выражении с помощью оператора new. Он используется для быстрого создания одноразовой реализации интерфейса или расширения класса.

Ключевые особенности:

  • Не имеет имени: Компилятор генерирует для него имя вида OuterClass$1.
  • Одноразовое использование: Создается в месте объявления, нельзя повторно использовать для создания других объектов.
  • Доступ к переменным: Имеет доступ к final или effectively final переменным внешнего класса или метода.
  • Ограничение наследования: Может либо расширять один класс, либо реализовывать один интерфейс.

Примеры:

  1. Реализация интерфейса Runnable:
    Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("Запуск из анонимного класса!");
    }
    });
    thread.start();
  2. Расширение класса ArrayList:
    List<String> list = new ArrayList<>() {
    @Override
    public boolean add(String s) {
        System.out.println("Добавлен элемент: " + s);
        return super.add(s);
    }
    };

Применение: Часто использовались для создания обработчиков событий в Swing/AWT, компараторов, запуска потоков. В современном Java (8+) во многих случаях их заменяют лямбда-выражения и ссылки на методы.