Mâu thuẫn logic:
abstract: Class bắt buộc được kế thừa (extend) để dùng (vì có abstract method hoặc ý định thiết kế).final: Class không được phép kế thừa (extend).
→ Hai từ khóa trái ngược nhau → Java cấm compile-time.
Ví dụ báo lỗi
public final abstract class Example { // Illegal combination
public void sample() { }
}
Example.java:1: error: illegal combination of modifiers: abstract and final
public final abstract class Example {
^
Phân tích chi tiết
Abstract class
- Chứa 0 hoặc nhiều abstract method.
- Không thể tạo instance trực tiếp (
new AbstractClass()lỗi). - Mục đích: Được extends bởi subclass, subclass implement abstract method.
Final class
- Không thể extends (
class Sub extends FinalClass→ compile error). - Mục đích: Ngăn chặn kế thừa, bảo toàn implementation.
Kết hợp?
Nếu class vừa abstract vừa final:
abstractbảo: "Phải có subclass để dùng".finalbảo: "Không được có subclass".- → Không thể thỏa mãn cả hai → Vô nghĩa → Java cấm.
Lưu ý: Method có thể vừa static vừa final (static method hiding), hoặc private + final (redundant nhưng hợp lệ). Chỉ class không được vừa abstract vừa final.