Ответ
Помимо переменных (полей класса и локальных), в Java ключевое слово final применяется к классам и методам.
1. Final класс
Запрещает создание подклассов. Это используется для обеспечения неизменяемости (immutability) или безопасности (например, класс String, Integer).
final class SecurityCriticalClass {
// Код класса
}
// Попытка наследования вызовет ошибку компиляции:
// class SubClass extends SecurityCriticalClass { } // ОШИБКА: Cannot inherit from final class
2. Final метод
Запрещает переопределение (override) метода в дочерних классах. Это гарантирует, что поведение метода останется неизменным в иерархии наследования.
class Parent {
// Этот метод нельзя переопределить
public final void criticalAlgorithm() {
System.out.println("Оригинальная, неизменная логика");
}
}
class Child extends Parent {
// @Override
// public void criticalAlgorithm() { } // ОШИБКА КОМПИЛЯЦИИ
}
Почему это важно?
- Безопасность и проектирование:
finalклассы и методы явно определяют контракт, который нельзя нарушить через наследование, что предотвращает непреднамеренное изменение критического поведения. - Оптимизация: Компилятор и JVM могут применять агрессивные оптимизации (например, встраивание вызова — inlining) к
finalметодам, так как их реализация гарантированно известна.