Theo mình hiểu, tính đa hình không sử dụng hay dựa vào kỹ thuật gì cả, vì bản chất của OOP là như vậy. Poly trong tiếng Việt là nhiều, còn morphism là biến đổi sang các hình thái khác nhau. Thực ra PHP thì tính đa hình không rõ lắm, nên mình sẽ lấy Java minh hoạ
public class Bird {
//thiết kế class tổng quan của chim như ăn, ỉa, makeLove
}
public class Pigeon extends Bird {
//thiết kế class chi tiết như gù, hót
}
//hình dáng 1, là chính nó
Pigeon bird1 = new Pigeon();
//nhưng cũng có thể chuyển sang hình dáng của chim
//và khi mang hình dáng của bố nó, thì nó chỉ dùng các tính năng mà bố nó qui định như ăn,ỉa, makeLove, không còn gù, ... giống như khi bạn thay mặt bố bạn đi làm gì đó ... thì phong thái của bạn phải là của bố.
Bird bird2 = new Pigeon();
//ngoài ra bạn cũng có ép kiểu (mình thấy dịch casting nên là đóng vai, chứ ai ép ai đek đâu
//tự mày muốn sang hình thái khác
Bird bird3 = (Bird) bird1;
Còn override tính năng thường thấy trong đa hình.
Override (over tiếng Việt là quá, còn ride thì có thể gọi là đứng trên): đại khái giả sử bố bạn có cái nhà, muốn thừa kế cho bạn. giờ bạn không muốn mà tự xây thì override nó (nhớ là đã tự xây thì phải hoành tráng hơn, con hơn cha là nhà có phúc …)
public class RichDad {
void buildHouse(){
//bố xây nhà để con thừa kế, tiết kiệm 20 năm cuộc đời con nhé
//hy sinh đời bố củng cố đời con
}
}
public class NaughtyBoy extends RichDad {
@Override
//nhớ là access modifier phải hoàng tráng hơn bố
public void buildHouse(){
//con đủ tài năng làm nhà to hơn nhé
//con tài năng chứ éo phải hư đâu
}
}
Overload thì không phải đa hình. Nhiều dev nghĩ overload là đa hình dành cho function. Overload function có các chữ ký (signature / blue print) khác hẳn nhau.
public class NaughtyBoy extends RichDad {
//Overloading
public void playGirl(){
//random và noname
}
//Overloading
public int playGirl(String hotgirl){
//tên hotgirl
}
}
Dùng overloading cho tiện thôi, chứ hoàn toàn có thể chuyển thành playGirlStreer và playGirlHot. Dev khi dùng không cần nhớ quá chi tiết, vì Java tự hiểu cần chọn hàm nào (hai hàm khá cùng mục đích, đặt 2 tên dễ confuse). Overloading chẳng liên quan gì tới tính đa hình cả.
p/s: casting (mình nghĩ nên dịch là đóng vai)
overloading (nạp song song)