5 phút tìm hiểu về tính đa hình trong Java

Giống như trong thực tế một cá nhân có thể có những mối quan hệ khác nhau với những người khác nhau. Một người phụ nữ có thể đồng thời là mẹ, con gái, chị gái và bạn bè, tức là cô ấy thực hiện các hành vi khác trong các tình huống khác nhau. Tính đa hình trong Java cũng tương tự như vậy. Nó cho phép chúng ta đạt được cùng một hành động theo nhiều cách khác nhau. Trong bài viết dưới đây, cùng Techie tìm hiểu khái niệm và các loại tính đa hình trong Java.

Tính đa hình trong Java là gì?

Tính đa hình trong Java là một tính chất của đối tượng, cho phép một đối tượng được thể hiện dưới nhiều hình thái khác nhau. Đa hình cho phép các đối tượng của các lớp con có thể được đối xử như các đối tượng của lớp cha chung của chúng.

Có hai loại đa hình trong Java: đa hình thời gian biên dịch (compile-time polymorphism) và đa hình thời gian chạy (runtime polymorphism).

Đặc điểm của tính đa hình trong Java

Sau đây là các đặc điểm quan trọng của đa hình trong Java:

  • Chức năng của một phương thức hoạt động khác nhau trong các tình huống khác nhau
  • Hành vi của một phương pháp phụ thuộc vào dữ liệu được cung cấp
  • Nó cho phép cùng tên cho một thành viên hoặc phương thức trong một lớp với các kiểu khác nhau
  • Đa hình hỗ trợ chuyển đổi kiểu ngầm định

Các loại tính đa hình trong Java

Các loại đa hình trong Java
2 loại đa hình trong Java

Đa hình thời gian biên dịch (compile-time polymorphism)

Đa hình thời gian biên dịch xảy ra khi một lớp định nghĩa nhiều phương thức có cùng tên nhưng khác nhau về số lượng hoặc kiểu tham số. Java sẽ tự động chọn phương thức phù hợp dựa trên kiểu dữ liệu cụ thể của đối tượng khi gọi phương thức.

Nạp chồng phương thức (Method Overloading)

Nạp chồng phương thức (Method Overloading) là quá trình có thể tạo ra nhiều phương thức có cùng tên trong cùng một lớp và tất cả các phương thức đó hoạt động theo những cách khác nhau. Nạp chồng phương thức xảy ra khi có nhiều hơn một phương thức có cùng tên trong lớp.

Java cho phép người dùng tự do sử dụng cùng tên cho các chức năng khác nhau miễn là nó có thể phân biệt giữa chúng theo loại và số lượng tham số.

Nạp chồng phương thức (Operator Overloading)

Nạp chồng phương thức là quá trình trong đó một lớp có hai hoặc nhiều phương thức có cùng tên. Tuy nhiên, việc triển khai phương thức cụ thể diễn ra theo số lượng tham số trong định nghĩa phương thức.

Ví dụ về thời gian biên dịch

Thực hiện phép cộng trong Java và hiểu khái niệm đa hình thời gian biên dịch bằng cách sử dụng phép trừ()
package staticPolymorphism;
public class Addition
{
void sum(int a, int b)
{
int c = a+b;
System.out.println(“ Addition of two numbers :” +c); }
void sum(int a, int b, int e)
{
int c = a+b+e;
System.out.println(“ Addition of three numbers :” +c); }
public static void main(String[] args)
{
Addition obj = new Addition();
obj.sum ( 30,90);
obj.sum(45, 80, 22);
}
}
Đầu ra của chương trình sẽ là:
Tổng của hai số: 120 Tổng của ba số: 147
Trong chương trình này, phương thức sum() nạp chồng hai loại thông qua các tham số khác nhau.

Đa hình thời gian chạy (runtime polymorphism)

Đa hình thời gian chạy xảy ra khi các lớp con kế thừa từ lớp cha định nghĩa lại các phương thức đã được định nghĩa trong lớp cha. Java sẽ gọi phương thức được ghi đè trong lớp con khi đối tượng của lớp con được sử dụng. Bạn có thể đạt được tính đa hình trong thời gian chạy thông qua Ghi đè phương thức

Ghi đè phương thức (Method Overriding)

Ghi đè phương thức được thực hiện khi một lớp con hoặc một lớp con có một phương thức có cùng tên, tham số và kiểu trả về với lớp cha hoặc lớp cha thì hàm đó sẽ ghi đè hàm trong siêu lớp. Nói một cách đơn giản hơn, nếu lớp con cung cấp định nghĩa của nó cho một phương thức đã có trong lớp cha; thì hàm đó trong lớp cơ sở được cho là bị ghi đè.

Toán tử ghi đè (Overriding Operator)

Toán tử ghi đè một thủ tục trong đó bạn có thể định nghĩa một toán tử trong cả lớp cha và lớp con có cùng chữ ký nhưng có khả năng hoạt động khác nhau.

Sự khác biệt giữa hai tính đa hình trong Java

Cuộc gọi phương thức

Đa hình thời gian chạy: Trình biên dịch không thể kiểm soát lệnh gọi phương thức trong thời gian chạy
Đa hình thời gian biên dịch: Cuộc gọi phương thức được xử lý bởi trình biên dịch

Độ linh hoạt

Đa hình thời gian chạy: Tính đa hình trong thời gian chạy thể hiện tính linh hoạt cao hơn khi các lệnh gọi phương thức được xử lý trong thời gian chạy
Đa hình thời gian biên dịch: Đa hình thời gian biên dịch kém linh hoạt hơn vì nó cần xử lý tất cả các lệnh gọi phương thức trong thời gian biên dịch.

Việc kết hợp lệnh

Đa hình thời gian chạy: Việc kết hợp lệnh gọi phương thức đúng với phương thức phù hợp được thực hiện trong thời gian chạy.
Đa hình thời gian biên dịch: Việc tích hợp lệnh gọi phương thức phù hợp với phương thức thích hợp được thực hiện trong thời gian biên dịch.

Ưu điểm của tính đa hình trong Java

  • Tăng khả năng sử dụng lại mã bằng cách cho phép các đối tượng thuộc các lớp khác nhau được coi là đối tượng của một lớp chung.
  • Cải thiện khả năng đọc và bảo trì mã bằng cách giảm số lượng mã cần viết và duy trì.
  • Hỗ trợ liên kết động, cho phép gọi phương thức chính xác trong thời gian chạy, dựa trên lớp thực tế của đối tượng.
  • Cho phép xử lý các đối tượng dưới dạng một loại duy nhất, giúp việc viết mã chung có thể xử lý các đối tượng thuộc các loại khác nhau trở nên dễ dàng hơn.
tại sao tính đa hình trong Java lại quan trọng
Một số ưu điểm nổi bật của tính đa hình trong Java

Nhược điểm của tính đa hình trong Java

  • Có thể làm cho việc hiểu hành vi của một đối tượng trở nên khó khăn hơn, đặc biệt nếu mã phức tạp.
  • Điều này có thể dẫn đến các vấn đề về hiệu suất vì hành vi đa hình có thể yêu cầu tính toán bổ sung trong thời gian chạy.
nhược điểm của tính đa hình trong Java
Tính đa hình trong Java có thể dẫn đến những vấn đề về hiệu suất

Kết luận

Tính đa hình trong Java giúp chúng ta viết mã linh hoạt, dễ bảo trì và mở rộng. Nó là một khía cạnh quan trọng trong lập trình hướng đối tượng, cho phép chúng ta tận dụng được tính chất kế thừa và tạo ra các hệ thống phần mềm linh hoạt và mở rộng.

>> Xem thêm: Tìm hiểu tổng quan Java Virtual Machine (JMV) trong Java

Khám phá thêm
Mối quan hệ tình yêu luôn là một chủ đề hấp dẫn và phức tạp. Cũng dễ hiểu khi nhiều...
“Chúng ta đang sống trong thế giới VUCA” – Câu nói này đã diễn tả đúng tình trạng thế giới...
Trong bài viết này, Techie sẽ giới thiệu đến bạn bản chất của tính năng constraints và auto-layout figma, cũng...
Temu, một ứng dụng mua sắm Trung Quốc, đang gây chấn động trên internet với những sản phẩm rất rẻ....
Theo một “nguồn tin mật” cho hay, Ghibli chính thức công bố trailer phần tiếp theo của tựa phim Vùng...
Cảm biến sinh học (Biosensor) đã đánh dấu một thành tựu quan trọng trong cuộc chiến chống đại dịch COVID-19 khi...
Thuật toán Dijkstra là một công cụ quan trọng trong lý thuyết đồ thị và tối ưu hóa. Với khả...
Với tỷ lệ dân số sử dụng Internet chiếm đến hơn 70%, Việt Nam luôn được coi là thị trường...