Trong Java, polymorphism (đa hình) là một khái niệm lập trình cho phép một hành động được thực hiện theo nhiều cách khác nhau. Nó là một trong các nguyên tắc cơ bản của Lập trình Hướng Đối Tượng (OOP), cho phép các đối tượng được xử lý dưới dạng thể hiện của lớp của chính chúng hoặc thể hiện của lớp cơ sở. Polymorphism trong Java thường được thực hiện thông qua hai cách chính: polymorphism tại thời điểm biên dịch (compile-time) còn gọi là đa hình tĩnh (static polymorphism), và polymorphism tại thời điểm chạy (runtime) còn gọi là đa hình động (dynamic polymorphism).
1. Static Polymorphism (Đa Hình Tĩnh)
Đa hình tĩnh trong Java được thực hiện thông qua method overloading. Method overloading xảy ra khi nhiều phương thức cùng tên tồn tại trong cùng một lớp nhưng có số lượng hoặc kiểu tham số khác nhau.
class Calculator {
// phương thức này trả về tổng của hai số nguyên
public int add(int a, int b) {
return a + b;
}
// Overloading cùng một phương thức để trả về tổng của ba số nguyên
public int add(int a, int b, int c) {
return a + b + c;
}
}
2. Dynamic Polymorphism (Đa Hình Động)
Đa hình động được thực hiện thông qua method overriding. Điều này xảy ra khi một lớp con cung cấp một triển khai cụ thể cho một phương thức đã được định nghĩa trong lớp cơ sở của nó hoặc một interface mà lớp đó đã triển khai.
class Animal {
public void sound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
// Overriding phương thức trong lớp Animal
@Override
public void sound() {
System.out.println("Dog barks");
}
}
class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
myDog.sound(); // Output: Dog barks
}
}
Trong ví dụ về đa hình động, Dog kế thừa từ Animal và ghi đè phương thức sound(). Khi gọi phương thức sound() trên một đối tượng Animal được tham chiếu bởi một đối tượng Dog, phiên bản của phương thức trong Dog được gọi, thể hiện đa hình động.
Lợi Ích của Polymorphism
- Tính linh hoạt và mở rộng: Cho phép các lớp khác nhau được xử lý thông qua một giao diện chung.
- Giảm thiểu mã nguồn: Cùng một phương thức có thể được sử dụng trên các đối tượng của các lớp khác nhau.
- Dễ dàng quản lý và bảo trì: Polymorphism giúp việc quản lý và bảo trì mã nguồn dễ dàng hơn do giảm sự phụ thuộc giữa các thành phần của mã.
Polymorphism là một khái niệm mạnh mẽ trong lập trình hướng đối tượng, giúp tạo ra các ứng dụng linh hoạt, mở rộng và dễ bảo trì.
Comments