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

Tại sao constructor không thể là final trong Java?

Từ khóa final trên phương thức nghĩa là: không cho phép override (ghi đè) phương thức đó ở lớp con.

Nhưng constructor không được kế thừa (inherited) trong Java. Lớp con không kế thừa constructor của lớp cha. Do đó, khái niệm "override constructor" không tồn tại.

→ Việc đặt final trước constructor vô nghĩa → Java cấm tại compile time.

Ví dụ báo lỗi

public class Student {
    public final String name;
    public final int age;
    
    public final Student() { // Sai: modifier final not allowed here
        this.name = "Raju";
        this.age = 20;
    }
    
    public void display() {
        System.out.println("Name: " + this.name);
        System.out.println("Age: " + this.age);
    }
    
    public static void main(String args[]) {
        new Student().display();
    }
}
Student.java:6: error: modifier final not allowed here
    public final Student(){
    ^

Tóm tắt logic

Khái niệmÁp dụng cho methodÁp dụng cho constructor
Kế thừa (Inheritance)CóKhông
Ghi đè (Override)CóKhông (không kế thừa nên không override được)
final ngăn chặnOverrideVô nghĩa (không có override để ngăn)

Lưu ý: Bạn có thể khai báo constructor là private (để dùng pattern Singleton, Factory) hoặc protected (chỉ cho subclass trong cùng package hoặc con kế thừa gọi qua super()).