Polymorphism (Đa hình)

Khả năng của chương trình phát hiện lớp THỰC của một đối tượng và gọi triển khai của nó, ngay cả khi kiểu thực sự không được biết trong ngữ cảnh hiện tại.

Hình dung: bãi đỗ xe

Mọi chiếc ô tô đều có thể di chuyển → đặt phương thức move lên class cha (khai báo trừu tượng), buộc class con tự định nghĩa cách di chuyển. Bạn đi lạc vào bãi đỗ xe, chọn bất kỳ chiếc xe nào - không biết chắc là xe gì, nhưng vẫn khiến nó di chuyển được: cách di chuyển được định nghĩa cụ thể theo từng chiếc xe.

<?php
class Car {
    public function move() { echo "Xe đang di chuyển\n"; }
}
 
class Sedan extends Car {
    public function move() { echo "Sedan đang chạy trên đường\n"; }
}
 
class SUV extends Car {
    public function move() { echo "SUV đang chạy trên địa hình khó khăn\n"; }
}
 
class SportsCar extends Car {
    public function move() { echo "SportsCar đang chạy ở tốc độ cao\n"; }
}
 
// Hàm nhận Car - KHÔNG cần biết đó là loại xe cụ thể nào
function testCarMovement(Car $car) {
    $car->move();
}
 
testCarMovement(new Sedan());     // Sedan đang chạy trên đường
testCarMovement(new SUV());       // SUV đang chạy trên địa hình khó khăn
testCarMovement(new SportsCar()); // SportsCar đang chạy ở tốc độ cao

Điều kiện an toàn

Đối tượng class con được dùng linh hoạt miễn là đảm bảo hành vi giống class cha: nếu có một class Car mà không thể “move”, ta không xem nó là ô tô nữa mà cần báo lỗi → chính là Liskov Substitution Principle.

Liên quan