Ответ
Модификатор final накладывает ограничения на изменение сущности и используется для создания констант, защиты от наследования и обеспечения неизменяемости.
1. Final класс: Запрещает наследование. Часто применяется для создания immutable-классов (например, String) или классов с критичной для безопасности логикой.
final class SecurityManager { ... }
// class SubManager extends SecurityManager { } // Ошибка компиляции
2. Final метод: Запрещает переопределение (override) в подклассах. Используется, когда реализация метода должна оставаться неизменной в иерархии наследования.
class Base {
public final void criticalAlgorithm() { ... }
}
3. Final переменная (включая поля и локальные переменные): После присвоения значения ссылку нельзя изменить.
- Для примитивов: Значение становится константой.
final int MAX_USERS = 100; // MAX_USERS = 200; // Ошибка компиляции - Для ссылок на объекты: Нельзя изменить саму ссылку, но состояние объекта (его поля) изменить можно, если они не final.
final List<String> list = new ArrayList<>(); list.add("Hello"); // Допустимо // list = new LinkedList<>(); // Ошибка компиляции
4. Final параметр метода: Запрещает переприсваивание аргумента внутри метода, что улучшает читаемость и предотвращает ошибки.
public void process(final String input) {
// input = "changed"; // Ошибка компиляции
}
Итог: final повышает безопасность, ясность кода (обозначая намерения) и может помогать JVM в оптимизации.