วิธีการใด ๆ ที่ประกาศเป็น ขั้นสุดท้าย ในซูเปอร์คลาส ไม่สามารถแทนที่ได้ โดยคลาสย่อย หากเราพยายามลบล้างวิธีสุดท้าย ของ super class เราจะได้รับข้อผิดพลาดใน Java
กฎสำหรับการนำวิธีการแทนที่ไปใช้
- การประกาศเมธอดควรเหมือนกับเมธอดที่จะถูกแทนที่
- คลาส (คลาสย่อย) ควรขยายคลาสอื่น (ซูเปอร์คลาส) ก่อนที่จะลองแทนที่ด้วยซ้ำ
- คลาสย่อยไม่สามารถแทนที่วิธีสุดท้ายของ Super Class ได้
ตัวอย่าง
class Car {
public void brake() {
System.out.println("brake() method of Car");
}
public final void accelerate() {
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();
}
public void accelerate() {
System.out.println("accelerate() method of Benz Car");
}
} ในตัวอย่างข้างต้น หากเราพยายามแทนที่ วิธีสุดท้าย (วิธีเร่ง()) ของ ซูเปอร์คลาส . คอมไพเลอร์จะ แสดงข้อผิดพลาด . ดังนั้นเราจึงไม่ลบล้างเมธอดสุดท้ายของซูเปอร์คลาสใน Java
ผลลัพธ์
overridden method is final