Ответ
Модификатор final имеет разное значение для классов и интерфейсов.
1. final класс:
Класс, объявленный как final, не может быть унаследован (от него нельзя создать подкласс).
Зачем это нужно?
- Обеспечение неизменяемости (Immutable classes): Например, класс
Stringобъявлен какfinal, чтобы предотвратить изменение его поведения через наследование. - Безопасность: Предотвращает создание подклассов, которые могут нарушить инварианты (условия корректности) родительского класса.
- Проектирование API: Явно указывает, что класс не предназначен для расширения.
Пример:
final class UtilityClass {
private UtilityClass() {} // Приватный конструктор
public static void helperMethod() { /* ... */ }
}
// Ошибка компиляции: Cannot inherit from final 'UtilityClass'
// class SubClass extends UtilityClass {}
2. final интерфейс:
Применение final к интерфейсу запрещено спецификацией Java и вызовет ошибку компиляции. Интерфейс по своей сути предназначен для реализации, и ключевое слово final противоречит этой цели.
// Ошибка компиляции: Illegal modifier for the interface
// final interface MyInterface {}