Какие операции запрещены для final-метода в Java?

«Какие операции запрещены для final-метода в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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-методов:

  1. Защита критической логики — обеспечение корректности алгоритма (например, шаблонного метода).
  2. Оптимизация производительности — JVM может выполнить инлайнинг (inlining) вызова метода.
  3. Обеспечение контракта класса — предотвращение изменения ключевого поведения в наследниках.