Bài tiếp theo chúng ta sẽ cùng tìm hiểu một tính chất đặc trưng và quan trọng nữa đó là tính đa hình trong lập trình hướng đối tượng Java (Polymorphism). Sau khi đã tìm hiểu tính kế thừa, trừu tượng và interface ở các bài trước.
Đa hình là gì?
Hiểu một cách đơn giản đa hình là tại từng thời điểm đối tượng sẽ có các hình thái khác nhau trong những hoàn cảnh khác nhau.
Ví dụ : Khi bạn ở trong trường học là sinh viên thì có nhiệm vụ học, nghe giảng, vào thư viện đọc sách… nhưng khi bạn ở nhà lại đóng vai trò là thành viên trong gia đình có nhiệm vụ làm việc nhà…rồi khi bạn vào siêu thị thì bạn đóng vai trò là khách hàng mua hàng. Vì vậy, ta hiểu đa hình của đối tượng là trong từng trường hợp, hoàn cảnh khác nhau thì đối tượng có khả năng thực hiện các công việc khác nhau.
Tính đa hình trong lập trình OOP Java
– Lớp cha được đại diện bởi các lớp con khác nhau gọi là đa hình. Tức là tại từng thời điểm đối tượng cha thực sự là đối tượng con nào đó.
– Ví dụ :
1 2 3 |
Animal a = new Animal(); a = new Cow(); // tại thời điểm, a là đối tượng Cow a = new Buffalo(); // tại thời điểm này a là đối tượng Buffalo |
– Trình biên dịch (compiler) chỉ biết kiểu dữ liệu của đối tượng khi khai báo. Tuy nhiên, giai đoạn runtime thì JVM xác định được đối tượng thực sự.
- Đa hình lúc biên dịch (compile) gọi là overloading.
- Đa hình lúc thực thi (runtime) gọi là overriding.
– Đa hình không áp dụng cho các thành phần tĩnh (static) của lớp.
– Vấn đề chuyển đổi kiểu dữ liệu là cơ bản hiện thực của đa hình.
– Ví dụ :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
class Animal { public void saySomething() { System.out.println("Umm..."); } } class Cow extends Animal { public void saySomething() { //super.saySomething(); System.out.println("Moo!"); } } class Buffalo extends Animal { public void saySomething() { //super.saySomething(); System.out.println("Bah!"); } } // Sử dụng public class TestPoly { public static void main(String[] args) { Animal a = new Animal(); Cow c = new Cow(); Buffalo b = new Buffalo(); a.saySomething(); a=c; a.saySomething(); a=b; a.saySomething(); } } |
Lời kết : Tính đa hình trong lập trình hướng đối tượng Java là một trong những thuộc tính quan trọng, vì vậy bạn không thể bỏ qua thuộc tính này dù nhiều lúc hơi khó hiểu một chút. Bạn nên đọc lại 1 lần nữa những nội dung trên nếu vẫn còn chưa nắm rõ tính chất này.
Chúc bạn thành công!
Leave a Reply