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

Tại sao class Java không thể vừa abstract vừa final?

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:

  • abstract bảo: "Phải có subclass để dùng".
  • final bả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.