анонимные классы
это наподобии абстракных классов, типа одноразовых классов
т.е. по факту мы не наследуюемся от какого то класса но при создании экземпляра в момент объявления объекта переопределяем какой либо метод на нужный.
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.
Основные характеристики анонимных классов:
-
Создание на месте: Анонимные классы создаются в момент их объявления, что позволяет сразу же использовать их без необходимости создания отдельного файла.
-
Переопределение методов: В анонимных классах можно переопределять методы родительского класса или интерфейса, что позволяет изменять поведение объектов.
-
Доступ к переменным: Анонимные классы могут обращаться к переменным, объявленным в родительском классе или методе, но только если они являются финальными или эффективно финальными (т.е. не изменяются после инициализации).
Пример использования анонимного класса:
Рассмотрим пример, где мы используем анонимный класс для реализации интерфейса 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);
}
}
Заключение
Анонимные классы предоставляют удобный способ создания одноразовых классов для реализации интерфейсов или абстрактных классов. Хотя с появлением лямбда-выражений их использование стало менее распространённым, они все еще могут быть полезны в определённых ситуациях, особенно когда требуется более сложная логика, чем просто вызов одного метода.