Skip to content

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

это наподобии абстракных классов, типа одноразовых классов

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

Animal cat = new Animal(){
@override
public void say(){
System.out.println("myau");
}
};

т.е. экземпляр класса Animal имел бы другой метод say но мы переопределили его только для того объекта cat

вместо базового класса для этих целей можно использовать вообще просто интерфейс

пример с интерфейсом в задании

[[Programming/java/2. инструменты backed/1. Stream API функц. прогр. java/1. анонимные классы/задача|задача]]

video: /home/ramanzes/Videos/synergy/исходное видео/2_1/Анонимные классы.mp4


Анонимные классы в Java — это особый вид классов, которые не имеют имени и создаются на месте, в основном для реализации интерфейсов или абстрактных классов. Они позволяют создавать экземпляры классов с переопределёнными методами без необходимости создания отдельного именованного класса. Это особенно полезно в контексте использования функциональных интерфейсов и Stream API.

Основные характеристики анонимных классов:

  1. Создание на месте: Анонимные классы создаются в момент их объявления, что позволяет сразу же использовать их без необходимости создания отдельного файла.

  2. Переопределение методов: В анонимных классах можно переопределять методы родительского класса или интерфейса, что позволяет изменять поведение объектов.

  3. Доступ к переменным: Анонимные классы могут обращаться к переменным, объявленным в родительском классе или методе, но только если они являются финальными или эффективно финальными (т.е. не изменяются после инициализации).

Пример использования анонимного класса:

Рассмотрим пример, где мы используем анонимный класс для реализации интерфейса Runnable:

public class Main {
    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("Запуск потока из анонимного класса");
            }
        };

        Thread thread = new Thread(runnable);
        thread.start();
    }
}

Использование анонимных классов с Stream API:

Хотя в современных версиях Java предпочтительнее использовать лямбда-выражения, анонимные классы все еще могут быть полезны. Например, если вам нужно создать компаратор для сортировки:

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

        names.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.length() - o2.length(); // Сортировка по длине строки
            }
        });

        System.out.println(names);
    }
}

Заключение

Анонимные классы предоставляют удобный способ создания одноразовых классов для реализации интерфейсов или абстрактных классов. Хотя с появлением лямбда-выражений их использование стало менее распространённым, они все еще могут быть полезны в определённых ситуациях, особенно когда требуется более сложная логика, чем просто вызов одного метода.