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ặn | Override | Vô 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()).