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
finaltrên method = cấm override.finaltrên class = cấm extends.finaltrên variable = cấm gán lại.- Dùng
finalkhi 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.