Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ทำไม Constructor ไม่สามารถเป็น Final ได้ใน Java?

คำตอบสั้น: เพราะ Constructor ไม่ถูกสืบทอด (Not Inherited) ดังนั้นการ Override Constructor จึงไม่มีอยู่จริง ทำให้ final (ซึ่งใช้ป้องกัน Override) ไม่มีความหมาย

เหตุผลลึกๆ

  1. วัตถุประสงค์ของ final method = ป้องกันไม่ให้ Subclass Override
  2. Constructor ไม่ถูกสืบทอด - Subclass ไม่ได้รับ Constructor จาก Superclass
  3. Subclass ต้องประกาศ Constructor เอง (อาจเรียก super())
  4. ไม่มีการ "Override Constructor" เลย -> final ไม่มีบทบาท

ตัวอย่างที่ Error

public class Student {
    public final String name;
    public final int age;
    
    // Compile Error: modifier final not allowed here
    public final Student() {
        this.name = "Raju";
        this.age = 20;
    }
}

Compile Error

Student.java:6: error: modifier final not allowed here
    public final Student(){
    ^

เปรียบเทียบกับ Method ปกติ

ลักษณะ Method Constructor
ถูกสืบทอด? ใช่ (ยกเว้น private) ไม่
สามารถ Override? ได้ ไม่ได้ (Overriding ไม่มีอยู่)
final มีความหมาย? มี (ป้องกัน Override) ไม่มี
final allowed? ได้ ไม่ได้ (Compile Error)

สรุป

Constructor ใช้สำหรับ Initialize Object ไม่ใช่พฤติกรรมที่สืบทอดได้ Java จึง запрет final modifier บน Constructor เพราะมันไม่มีความหมายทาง Logic และอาจสร้างความสับสน