เมธอดที่ประกาศ 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
| Final บน | ผลกระทบ |
|---|---|
| Method | ไม่สามารถ Override ได้ |
| Class | ไม่สามารถ Extend ได้ (No Subclass) |
| Variable | ไม่สามารถ Reassign ได้ (Constant) |