Các phương thức overloaded trong Java là những phương thức có cùng tên nhưng khác nhau ở danh sách các tham số. Trong bài viết này chúng ta sẽ cùng tìm hiểu làm thế nào để tạo và sử dụng các phương thức overloaded trong Java các bạn nhé!
Một số các nguyên tắc dưới đây để chúng ta xác định các phương thức overloaded:
- Các phương thức overloaded phải cùng tên nhưng khác nhau ở các tham số.
- Chúng có thể được định nghĩa cùng hoặc khác kiểu dữ liệu trả về.
- Chúng có thể được định nghĩa cùng hoặc khác access modifier.
- Các phương thức không được gọi là overloaded nếu chúng chỉ khác nhau ở kiểu dữ liệu trả về hoặc access modifier.
Ví dụ dưới đây chúng ta có hai phương thức overloaded cùng tên printMessage():
1 2 3 4 5 6 7 8 9 10 11 12 |
package com.huongdanjava; public class Example { public void printMessage(String name) { System.out.println("Name=" + name); } public void printMessage(int age) { System.out.println("Age=" + age); } } |
Và cùng có một tham số nhưng kiểu dữ liệu của những tham số đó thì khác nhau: một kiểu String, một kiểu int.
Các tham số trong các phương thức overloaded
Danh sách các tham số trong các phương thức overloaded phải khác nhau, điều này có nghĩa;
- Số lượng các tham số khác nhau.
Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 |
package com.huongdanjava; public class Example { public void printMessage(String name) { System.out.println("Name=" + name); } public void printMessage(String name, int age) { System.out.println("Name=" + name + ", age=" + age); } } |
- Số lượng các tham số có thể giống nhau nhưng khác nhau về kiểu dữ liệu theo thứ tự danh sách các tham số.
Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 |
package com.huongdanjava; public class Example { public void printMessage(String name, int age) { System.out.println("Name=" + name + ", age=" + age); } public void printMessage(int age, String name) { System.out.println("Name=" + name + ", age=" + age); } } |
Có một điều các bạn phải lưu ý là có những kiểu dữ liệu có thể chuyển đổi sang những kiểu dữ liệu khác ví dụ từ kiểu int chuyển sang double nên mặc dù chúng ta có thể khai báo các phương thức overloaded với chúng nhưng khi sử dụng có những trường hợp chúng ta sẽ bị lỗi compile.
Ví dụ, mình có hai phương thức printMessage được định nghĩa như sau:
1 2 3 4 5 6 7 8 9 10 11 12 |
package com.huongdanjava; public class Example { public void printMessage(String name, int age, double mark) { System.out.println("Name=" + name + ", age=" + age + ", mark=" + mark); } public void printMessage(String name, double mark, int age) { System.out.println("Name=" + name + ", age=" + age + ", mark=" + mark); } } |
Nhưng khi sử dụng trong trường hợp dưới đây sẽ bị lỗi compile:
Vì kiểu int có thể chuyển đổi qua kiểu double nên trong trường hợp này compiler không biết chúng ta đang gọi phương thức nào.
Để có thể sử dụng được, chúng ta cần khai báo rõ ràng kiểu dữ liệu mà chúng ta truyền vào như sau:
Kiểu dữ liệu trả về
Các phương thức không được gọi là overloaded nếu chúng chỉ khác nhau ở kiểu dữ liệu trả về và trong trường hợp này code của chúng ta cũng không thể compile luôn.
Ví dụ:
Access modifier
Tương tự như kiểu dữ liệu trả về, các phương thức cũng không gọi là overloaded nếu chúng chỉ khác nhau ở access modifier và code của chúng ta cũng bị lỗi compile nếu chúng ta định nghĩa như thế luôn.
Ví dụ:
long
cái overloaded này có khác gì với cái this. trong java không anh
em thấy bên hàm main gọi và đều có đối số truyền vào
tác dụng sử dụng overloaded là gì ad.
e cảm ơn nhiều ạ