Polymorphism là khả năng của object lấy nhiều hình thức. Dùng phổ biến nhất trong OOP khi reference của parent class dùng để tham chiếu child class object.
Bất kỳ Java object nào pass hơn một test IS-A được coi là polymorphic. Trong Java, tất cả Java object đều polymorphic vì object nào cũng pass IS-A test cho kiểu của nó và cho class Object.
Quan trọng: chỉ có thể truy cập object qua reference variable. Reference variable chỉ có một kiểu. Khi khai báo, kiểu reference variable không thể thay đổi.
Reference variable có thể gán lại cho object khác miễn không khai báo final. Kiểu reference variable quyết định method có thể invoke trên object.
Reference variable có thể tham chiếu bất kỳ object của kiểu khai báo hoặc subtype. Reference variable có thể khai báo kiểu class hoặc interface.
Ví dụ
Xem ví dụ.
public interface Vegetarian {}
public class Animal {}
public class Deer extends Animal implements Vegetarian {}
Lớp Deer polymorphic vì đa kế thừa. Các điều sau đúng:
- A Deer IS-A Animal
- A Deer IS-A Vegetarian
- A Deer IS-A Deer
- A Deer IS-A Object
Áp dụng reference variable facts cho Deer object reference, các khai báo sau hợp lệ:
Ví dụ
Deer d = new Deer(); Animal a = d; Vegetarian v = d; Object o = d;
Tất cả reference variables d, a, v, o tham chiếu cùng một Deer object trong heap.