Ответ
Final-метод в Java нельзя переопределить (override) в подклассе. Это основное ограничение, которое гарантирует неизменность поведения метода в иерархии наследования.
Также final-метод нельзя:
- Сделать
abstract— эти модификаторы взаимоисключающие (abstractтребует реализации,finalеё запрещает). - Скрыть (hide) в подклассе — если метод
static, его нельзя переопределить, но можно скрыть;finalзапрещает и это.
Пример ошибки переопределения:
class Parent {
final void display() {
System.out.println("Parent's final method");
}
}
class Child extends Parent {
// Ошибка компиляции: display() in Child cannot override display() in Parent
// void display() { System.out.println("Trying to override"); }
}
Практическое применение final-методов:
- Защита критической логики — обеспечение корректности алгоритма (например, шаблонного метода).
- Оптимизация производительности — JVM может выполнить инлайнинг (inlining) вызова метода.
- Обеспечение контракта класса — предотвращение изменения ключевого поведения в наследниках.