Article:
Polimorphism
1042
phananhvu.myopenid.com 125Over 4 years ago |
Các bạn có thể hiểu đơn giản "Polymorphism - Đa Hình" như thế này:
Chẳng hạn ta có class:
"Động Vật Có Vú" có Method: "Ăn"
Class "Người" là "Con" của "Động Vật Có Vú" cũng có method: "Ăn"
Class "Chó" là "Con" của "Động Vật Có Vú" cũng có method: "Ăn"
Class "Trâu" là "Con" của "Động Vật Có Vú" cũng có method: "Ăn"
Nhưng người thì ăn "Cơm", "Trâu" thì ăn "Cỏ" còn chó thì ăn "Cư...". Đấy là 1 VD của sự đa hình thái. Để hiểu hơn thì các bạn phải tìm hiểu kỹ các khái niệm: Extends, Overloade, Overide. 3 khái niệm trên trong Java dùng để thể hiện "Đa Hình"
"Động Vật Có Vú" nó là cha và cũng có thể coi nó là một thằng phù thuỷ có khả năng hoá thân có lúc thành "Người", có lúc thành "Chó", "Trâu"... Ở mỗi hình thái, nó sẽ có tương ứng với một kiểu "ăn" khác nhau. Hiển nhiên rồi.
Sự hoá thân này không cố định, nó sẽ tuỳ điều kiện "if...then" nào đó mà thành "người", hoặc "trâu"... Việc không cố định đó gọi là bind muộn hay là liên kếtđộng trong C++. Chỉ xác định được là "người" hay là "trâu" trong lúc thực thi. Do đó mới gọi là liên kết động.
Còn khi ta chỉ định luôn cho nó là "trâu". ( Ví dụ:Trâu con1 = new Trâu(); ) thì lúc đó ngay từ đầu trình biên dịch đã biết rằng thằng con1 này được chỉ định cố định là kiểu "Trâu" và chỉ có thể ăn cỏ được thôi. Điều này gọi là bind sớm.
Do đó, nếu các bạn có muốn làm phù thuỷ và có muốn dùng nhiều kiểu ăn thì dùng Polymorphism. Còn muốn làm 1 động vật đơn giản suốt đời chỉ có một kiểu ăn thì dùng kiểu thông thường.
import java.util.Random;
interface DVCV {
public void An();
}
class Nguoi implements DVCV {
public void An() {
System.out.println("DVCV La Nguoi---AnCom");
}
}
class Trau implements DVCV {
public void An() {
System.out.println("DVCV La Trau---AnCo?");
}
}
class Cho implements DVCV {
public void An() {
System.out.println("DVCV La Cho---AnXuong");
}
}
// Chuong trinh thuc hien polimorphism
class Bienhoa {
public static void main(String args[]) {
DVCV dongvatcovu;
Random r = new Random();
switch (r.nextInt(3)) {
case 0:
dongvatcovu = new Nguoi();
dongvatcovu.An();
break;
case 1:
dongvatcovu = new Trau();
dongvatcovu.An();
break;
case 2:
dongvatcovu = new Cho();
dongvatcovu.An();
break;
default:
break;
}
}
}
Nguồn: JavaVietnam
Java căn bản
125