Java là một ngôn ngữ hướng đối tượng. Nền tảng của bất kỳ ngôn ngữ hướng đối tượng nào đều được đặt trên ba trụ cột: Đa hình, Kế thừa và Đóng gói.
Trong khuôn khổ bài viết này, Box.edu sẽ cùng bạn tìm hiểu chi tiết về tính đa hình trong Java.
Mục lục bài viết
Tính đa hình trong Java là gì?
Đa hình là một thuật ngữ dùng để diễn tả một hành động bằng nhiều cách khác nhau. Trong Java, tính đa hình đề cập đến khả năng tham chiếu và xử lý nhiều đối tượng và lớp thông qua một giao diện thống nhất.
Bất kỳ đối tượng nào thỏa mãn nhiều mối quan hệ IS-A đều phù hợp để triển khai dưới dạng đối tượng đa hình.
Ví dụ, đối tượng của lớp Square IS-A Square. Nó cũng là hình dạng và nó cũng là vật thể. Có nghĩa là Object và Shape có thể được khai báo là các lớp cha của các lớp Square con. Do đó, một giao diện chung Object có thể được sử dụng để tham chiếu đến tất cả các đối tượng của lớp Square.
Ngoài ra, giao diện Shape cũng có thể được sử dụng để tham chiếu đến tất cả các đối tượng của lớp Square, v.v. Điều này là do mối quan hệ IS-A của Square với các lớp Object và Shape.
Tính đa hình trong Java bao gồm những loại nào
Tính đa hình tĩnh
Đa hình tĩnh (còn được gọi là đa hình thời gian biên dịch) được thực hiện thông qua các phương thức nạp chồng của một lớp. Ví dụ sau đây minh họa khái niệm Đa hình tĩnh.
Hãy xem xét một lớp Toán học có chứa ba phương thức Thêm. Phương thức đầu tiên trả về một số nguyên và nhận hai biến kiểu số nguyên.
Phương thức Thêm thứ hai cũng trả về số nguyên nhưng nhận ba biến kiểu số nguyên và phương thức Thêm thứ ba trả về một Chuỗi và nhận hai tham số kiểu chuỗi.
Do đó, tất cả các phương thức Add đều có số lượng kiểu tham số khác nhau. Ba phương thức Thêm này được gọi là phương thức nạp chồng.
Định nghĩa của lớp Toán của tính đa hình trong Java được thực hiện như sau:
public class Maths {
public int Add (int num1, int num2)
{
return num1 + num2;
}
public int Add(int num1, int num2, int num3)
{
return num1 + num2 + num3;
}
public String Add (String s1, String s2)
{
return s1 + s2;
}
}
Nếu phương thức Add được gọi trên đối tượng của lớp Maths bằng cách truyền hai tham số kiểu số nguyên. Thì trình biên dịch Java sẽ tìm phương thức Add trong lớp Maths nhận hai tham số kiểu số nguyên.
Nếu phương thức Add được gọi bằng cách truyền ba tham số kiểu số nguyên. Thì phương thức Add được nạp chồng tương ứng với ba tham số kiểu số nguyên sẽ được gọi. Và nếu phương thức Thêm với hai tham số chuỗi được gọi, trình biên dịch sẽ tự động gọi phương thức Thêm đó.
Đoạn mã sau minh họa ba lệnh gọi phương thức Thêm.
Maths m1 = new Maths ();
int sum = m1.Add (50, 100);
System.out .println (sum);
sum = m1.Add (50, 100, 90); System.out .println (sum);
String str = m1.Add ("Udemy", "Hướng dẫn"); System.out .println (str);
Đầu ra của đoạn mã trên sẽ là:
150
240
Với cùng một tên phương pháp, ba loại chức năng khác nhau sẽ đạt được. Đây là nguyên tắc cơ bản của tính đa hình trong Java.
Đa hình động
Tính đa hình động được triển khai trong Java bằng cách sử dụng các phương thức bị ghi đè. Ghi đè phương thức đề cập đến quá trình cung cấp cùng một tên phương thức nhưng với các tham số khác nhau.
Ví dụ, có một lớp Shape cha có chứa một phương thức Draw. Một lớp Square dẫn xuất mở rộng lớp Shape và thực hiện phương thức Draw của riêng nó.
Có nghĩa là lớp Square ghi đè phương thức Draw của lớp Shape cha. Có một lớp dẫn xuất khác của lớp Shape là lớp Circle và lớp này cũng ghi đè phương thức Draw của lớp cha.
Bây giờ, nếu tham chiếu của lớp Shape được sử dụng để tham chiếu đến đối tượng của lớp Square. Và sau đó phương thức Draw được gọi, phương thức Draw của lớp Square sẽ được gọi.
Tuy nhiên, nếu đối tượng lớp Shape được sử dụng để tham chiếu đến đối tượng của lớp Circle. Và sau đó phương thức Draw được gọi trên đó, phương thức Draw của lớp circle sẽ được gọi.
Nói cách khác, các chức năng khác nhau của phương pháp Draw sẽ đạt được thông qua một giao diện thống nhất duy nhất.
Đoạn mã sau đây mô tả tính đa hình trong Java:
public class Shape {
public void Draw()
{
System.out.println ("A shape is being drawn");
}
}
The Square and Circle classes extend this Shape class as follows:
public class Square extends Shape
{
public void Draw()
{
System.out.println ("A Square is being drawn");
}
}
public class Circle extends Shape
{
public void Draw()
{
System.out.println ("A Circle is being drawn");
}
}
Bây giờ, nếu ba biến tham chiếu của lớp Shape được khởi tạo bằng các đối tượng của các lớp Shape, Square và Circle. Sau đó phương thức Draw được gọi trên mỗi biến thì kết quả sẽ khác nhau.
Đoạn mã sau thể hiện điều này:
Shape s1 = new Shape();
Shape s2 = new Square();
Shape s3 = new Circle();
s1.Draw();
s2.Draw();
s3.Draw();
Trong đó:
S1: Đề cập đến tối tượng của hình dạng lớn
S2: Đề cập đến tối tượng của lớp Square
S3: Đề cập đến đối tượng của lớp tròn.
Mặc dù ba biến là của một lớp Hình dạng, tuy nhiên đối tượng mà chúng tham chiếu đến là khác nhau. Do đó, phương thức Draw của đối tượng mà các biến này tham chiếu đến sẽ được gọi. Đầu ra của đoạn mã trên sẽ như sau:
Hình dạng đang được vẽ
Một hình vuông đang được vẽ
Một vòng tròn đang được vẽ
Tổng kết
Như vậy thông qua bài viết trên đây, Box.edu đã cùng bạn tìm hiểu về tính đa hình trong Java. Chúng tôi hy vọng những kiến thức trên sẽ hữu ích đối với bạn.
Cảm ơn và chúc bạn thành công!