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

Override Final Method ของ Superclass ใน Java ผลลัพธ์อย่างไร?

เมธอดที่ประกาศ final ใน Superclass ไม่สามารถ Override ได้ ถ้าพยายาม Override จะเกิด Compile-time Error

กฎ Method Overriding

  • Method Signature ต้องเหมือนกัน (Name, Parameters, Return Type)
  • Subclass ต้อง Extends Superclass ก่อน
  • Subclass ไม่สามารถ Override Final Method ของ Superclass ได้

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


class Car {
    public void brake() {
        System.out.println("brake() method of Car");
    }
    
    public final void accelerate() {  // FINAL METHOD
        System.out.println("accelerate() method of Car");
    }
}

public class BenzCar extends Car {
    public static void main(String[] args) {
        BenzCar benz = new BenzCar();
        benz.accelerate();
        benz.brake();
    }
    
    // พยายาม Override Final Method - COMPILE ERROR!
    public void accelerate() {
        System.out.println("accelerate() method of Benz Car");
    }
}

Error Message


overridden method is final

คำอธิบาย

  • brake() ไม่ใช่ final → Override ได้
  • accelerate() เป็น final → Override ไม่ได้
  • Compiler ตรวจสอบตอน Compile (ไม่ใช่ Runtime)

Final Method vs Final Class vs Final Variable

Best Practice

  • ใช้ final method เมื่อ Logic เป็น Critical ไม่อยากให้ลูกเปลี่ยน (Security, Stability)
  • ใช้ final class เมื่อออกแบบ Immutable หรือ Utility (String, Wrapper Classes)
  • Document เหตุผลทำไม Final (ให้ Maintainer เข้าใจ)

สิ่งที่ทำได้กับ Final Method

  • Overload ได้ (Signature ต่างกัน)
  • Call super.finalMethod() ได้
  • Hide (Static Method) - Static Method ไม่ Override แต่ Hide
Final บนผลกระทบ
Methodไม่สามารถ Override ได้
Classไม่สามารถ Extend ได้ (No Subclass)
Variableไม่สามารถ Reassign ได้ (Constant)