Ответ
Java — мультипарадигменный язык, но с явным доминированием объектно-ориентированного программирования (ООП).
1. Объектно-ориентированное программирование (ООП) — основа Java:
- Инкапсуляция: Сокрытие реализации через модификаторы доступа (
private,protected,public). - Наследование: Механизм
extendsдля создания иерархий классов (одиночное наследование). - Полиморфизм: Возможность объекта принимать множество форм (переопределение методов
@Override, интерфейсы). - Абстракция: Интерфейсы (
interface) и абстрактные классы (abstract class).
2. Поддержка функционального программирования (с Java 8+): Java引入了 функции как объекты первого класса через функциональные интерфейсы и лямбда-выражения.
import java.util.List;
import java.util.Arrays;
public class FunctionalExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Anna", "Alex");
// Функциональный стиль: поток (Stream) + лямбда + ссылка на метод
names.stream()
.filter(name -> name.startsWith("A")) // Лямбда-выражение (Predicate)
.map(String::toUpperCase) // Ссылка на метод
.forEach(System.out::println); // Output: ALICE, ANNA, ALEX
}
}
3. Императивное/структурное программирование:
Java полностью поддерживает классические императивные конструкции: циклы (for, while), условные операторы (if-else, switch), что делает код предсказуемым и понятным.
4. Что Java НЕ поддерживает (или поддерживает ограниченно):
- Чистое функциональное программирование: Отсутствие иммутабельности по умолчанию, нет алгебраических типов данных.
- Процедурное программирование в чистом виде: Хотя можно писать статические методы, структура языка заточена под ООП.
- Метапрограммирование: В сравнении с языками вроде Ruby или Python, возможности ограничены (рефлексия, аннотации).
Вывод: Java — это в первую очередь ООП-язык, обогащенный элементами функционального программирования для более выразительной и лаконичной работы с коллекциями и асинхронными операциями.