Может ли метод в Java быть объявлен как final?

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

Ответ

Да, метод может быть объявлен с модификатором final. Это запрещает его переопределение в любых классах-наследниках.

Семантика и применение:

  • Защита реализации: Гарантирует, что критичная для корректной работы класса логика не будет изменена в подклассах.
  • Обеспечение контракта: Полезно в классах, где поведение метода должно оставаться неизменным для сохранения инвариантов класса.
  • Неявный final: private и static методы не могут быть переопределены, поэтому объявлять их final избыточно.

Пример:

class PaymentService {
    // Этот метод содержит финальную логику расчёта комиссии.
    // Его переопределение могло бы нарушить финансовые правила.
    public final BigDecimal calculateFee(BigDecimal amount) {
        return amount.multiply(new BigDecimal("0.02")); // Комиссия 2%
    }

    public void processPayment(BigDecimal amount) {
        BigDecimal fee = calculateFee(amount);
        // ... логика оплаты
    }
}

class CustomPaymentService extends PaymentService {
    // ОШИБКА КОМПИЛЯЦИИ: calculateFee(..) cannot override final method
    // @Override
    // public BigDecimal calculateFee(BigDecimal amount) { ... }
}

Ключевое слово final можно применять к переменным, методам и классам, каждый раз обеспечивая неизменяемость на своём уровне.