การแทนที่เมธอดเป็นตัวอย่างของความแตกต่างระหว่างรันไทม์ ในการแทนที่เมธอด คลาสย่อยจะแทนที่เมธอดที่มีลายเซ็นเดียวกันกับในซูเปอร์คลาส ในช่วงเวลารวบรวม จะมีการตรวจสอบประเภทอ้างอิง อย่างไรก็ตาม ในรันไทม์ JVM จะคำนวณประเภทอ็อบเจ็กต์และจะรันเมธอดที่เป็นของอ็อบเจกต์นั้น
ตัวอย่าง
ดูตัวอย่างด้านล่างเพื่อทำความเข้าใจแนวคิด -
class Animal {
public void move() {
System.out.println("Animals can move");
}
}
class Dog extends Animal {
public void move() {
System.out.println("Dogs can walk and run");
}
}
public class TestDog {
public static void main(String args[]) {
Animal a = new Animal(); // Animal reference and object
Animal b = new Dog(); // Animal reference but Dog object
a.move(); // runs the method in Animal class
b.move(); // runs the method in Dog class
}
} ผลลัพธ์
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
Animals can move Dogs can walk and run