Tính đa hình là một khái niệm trong lập trình hướng đối tượng. Tính đa hình (polymorphism) cho phép một đối tượng của một lớp con được gọi bằng cách sử dụng một biến của lớp cha hoặc interface. Điều này cho phép một đối tượng của lớp con có thể thay thế cho đối tượng của lớp cha hoặc interface tương tự.
Các bài viết liên quan:
Có ba loại tính đa hình trong Java:
- Tính đa hình toán tử: cho phép sử dụng toán tử một cách đa hình. Ví dụ như sử dụng toán tử “+” để thực hiện cộng hai số hoặc cộng hai chuỗi.
- Tính đa hình phương thức: cho phép một phương thức của lớp con được gọi bằng cách sử dụng một biến của lớp cha. Điều này cho phép một phương thức của lớp con thay thế cho phương thức của lớp cha.
- Tính đa hình tham chiếu: cho phép một đối tượng của lớp con được gán cho một biến của lớp cha hoặc interface. Điều này cho phép một đối tượng của lớp con thay thế cho đối tượng của
Tại sao cần sử dụng tính đa hình
Sử dụng tính đa hình là một trong các kĩ thuật quan trọng trong lập trình hướng đối tượng. Tính đa hình giúp cho mã của bạn dễ dàng hơn để bảo trì và mở rộng, và cho phép bạn sử dụng các đối tượng tổng quát hơn.
- Khi bạn muốn sử dụng các đối tượng tổng quát: Tính đa hình cho phép bạn sử dụng các đối tượng tổng quát hơn, vì nó cho phép bạn sử dụng một biến của lớp cha hoặc interface để gọi các phương thức của lớp con.
- Khi bạn muốn sử dụng các đối tượng đa dạng hơn: Tính đa hình cho phép bạn sử dụng các đối tượng đa dạng hơn, vì nó cho phép một phương thức của lớp con được gọi bằng cách sử dụng một biến của lớp cha.
- Khi bạn muốn tái sử dụng mã: Tính đa hình cho phép bạn tái sử dụng mã dễ dàng hơn, vì nó cho phép bạn sử dụng các phương thức của lớp cha hoặc interface trong nhiều lớp con khác nhau.
Tuy nhiên, chúng ta cần chú ý sử tính đa hình khi sử dụng chúng. Sử dụng tính đa hình quá nhiều có thể gây rối tung và khó hiểu cho mã, và cũng có thể gây ra lỗi trong thời gian chạy.
Cần lưu ý rằng khi sử dụng tính đa hình, chúng ta cần chắc chắn rằng các phương thức được gọi là chính xác và có nghĩa trong mỗi lớp con.
Chúng ta cần chú ý trong việc sử dụng tính đa hình với thuộc tính, thỉnh thoảng sử dụng tính đa hình với thuộc tính có thể gây rối tung trong quá trình hơn và có thể gây ra lỗi trong thời gian chạy.
Chúng ta cũng cần chú ý trong việc sử dụng tính đa hình khi làm việc với kiểu dữ liệu, vì một số ngôn ngữ hướng đối tượng không hỗ trợ tính đa hình với kiểu dữ liệu.
Chung qua là, Tính đa hình là một trong những khái niệm quan trọng trong lập trình hướng đối tượng, nó có thể giúp cho mã dễ dàng hơn để bảo trì và mở rộng, tuy nhiên chúng ta cần chú ý khi sử dụng để tránh gây ra lỗi trong thời gian chạy.
Một vài ví dụ sử dụng tính đa hình trong java
Ví dụ 1: Tính đa hình toán tử
class Shape { double area() { return 0; } } class Rectangle extends Shape { double width; double height; Rectangle(double width, double height) { this.width = width; this.height = height; } double area() { return width * height; } } class Circle extends Shape { double radius; Circle(double radius) { this.radius = radius; } double area() { return Math.PI * radius * radius; } }
Trong ví dụ trên, lớp Shape là lớp cha chung cho lớp Rectangle và lớp Circle. Lớp Rectangle và lớp Circle kế thừa từ lớp Shape và ghi đè lên phương thức area() để tính diện tích của hình chữ nhật và hình tròn.
Ví dụ 2: Tính đa hình phương thức
abstract class Animals { public abstract void sound(); } class Dog extends Animals { public void sound() { System.out.println("Bark"); } } class Cat extends Animals { public void sound() { System.out.println("Meow"); } }
Trong ví dụ trên, lớp Animals là lớp cha chung cho lớp Dog và lớp Cat. Lớp Dog và lớp Cat kế thừa từ lớp Animals và ghi đè lên phương thức sound() để in ra tiếng giọng của chú chó hoặc tiếng mèo.
Ví dụ 3: Tính đa hình tham chiếu
interface Printable { void print(); } class Book implements Printable { public void print() { System.out.println("Printing a book"); } } class Newspaper implements Printable { public void print() { System.out.println("Printing a newspaper"); } }
Trong ví dụ trên, interface Printable là interface chung cho lớp Book và lớp Newspaper. Lớp Book và lớp Newspaper implement từ interface Printable và ghi đè lên phương thức print() để in ra tình trạng in sách hoặc báo.
Các ví dụ trên minh họa rằng tính đa hình cho phép chúng ta sử dụng một đối tượng của lớp con bằng cách sử dụng một biến của lớp cha hoặc interface. Điều này cho phép chúng ta sử dụng các đối tượng tổng quát hơn và có thể tái sử dụng mã dễ dàng hơn.