Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Điều gì xảy ra khi override final method của superclass trong Java?

Bất kỳ phương thức nào khai báo final trong superclass KHÔNG THỂ override bởi subclass. Nếu cố override final method của superclass, sẽ bị lỗi compile-time trong Java.

Quy tắc Method Overriding

  • Khai báo phương thức phải giống hệt phương thức bị override.
  • Lớp con phải extends lớp cha trước khi override.
  • Lớp con KHÔNG BAO GIỜ override được final method của lớp cha.

Ví dụ minh họa lỗi

class Car { 
    public void brake() { 
        System.out.println("brake() method of Car"); 
    } 
    public final void accelerate() { 
        System.out.println("accelerate() method of Car"); 
    } 
} 

public class BenzCar extends Car { 
    public static void main(String[] args) { 
        BenzCar benz = new BenzCar(); 
        benz.accelerate(); 
        benz.brake(); 
    } 
    
    public void accelerate() { // LỖI: override final method 
        System.out.println("accelerate() method of Benz Car"); 
    } 
}

Compiler sẽ ném lỗi tại phương thức accelerate() trong BenzCar.

Kết quả đầu ra (lỗi compile)

overridden method is final

Giải thích

  • final trên method = cấm override.
  • final trên class = cấm extends.
  • final trên variable = cấm gán lại.
  • Dùng final khi muốn "khóa" hành vi, đảm bảo không bị ghi đè (security, performance, design).

Phương pháp thay thế

Nếu cần mở rộng hành vi:

  • Bỏ final (nếu kiểm soát code cha).
  • Dùng composition thay vì inheritance.
  • Dùng Template Method Pattern: method final gọi các method abstract/hook.