Ответ
Да, начиная с Java 8. Интерфейсы могут содержать методы с реализацией двух типов: default и static.
1. Default методы
Позволяют добавлять новую функциональность в существующие интерфейсы, не ломая обратную совместимость с уже написанными классами.
interface NotificationService {
// Абстрактный метод (без реализации)
void send(String recipient, String message);
// Default метод (с реализацией по умолчанию)
default void sendUrgent(String recipient, String message) {
System.out.println("[URGENT] Preparing...");
send(recipient, "URGENT: " + message);
}
}
Класс, реализующий NotificationService, обязан реализовать send(), но может использовать или переопределить sendUrgent().
2. Static методы
Предоставляют служебные (утилитные) функции, логически связанные с интерфейсом. Вызываются только через имя интерфейса.
interface MathOperations {
static boolean isEven(int number) {
return number % 2 == 0;
}
}
// Использование
boolean result = MathOperations.isEven(4); // true
Важно: И default, и static методы должны иметь тело. Они не могут быть abstract.