Chào các bạn đã đến với chủ đề tiếp theo của mình. Hôm nay, mình sẽ tiếp tục tìm hiểu về cách Nạp chồng phương thức (overloading method) trong lập trình Java. Ở bài này, mình sẽ đi qua những nội dung như sau:
Nội dung
- 1. Overloading trong Java là gì?
- 2. Method overloading – Thay đổi số lượng tham số
- 3. Method overloading – Thay đổi kiểu dữ liệu
- 4. Method overloading – Thay đổi trình tự kiểu dữ liệu của các tham số đầu vào
- 5. Method overloading – Tự động chuyển kiểu dữ liệu (Type Promotion)
- 6. Method overloading không hợp lệ
- 7. Kết
1. Overloading trong Java là gì?
Method overloading là một tính năng cho phép một class có nhiều method cùng tên nhưng khác danh sách các tham số đầu vào.
Chúng ta có 3 cách để implement method overloading
- Thay đổi số lượng tham số lượng tham số đầu vào
- Thay đổi kiểu dữ liệu của các tham số đầu vào
- Thay đổi trình tự kiểu dữ liệu của các tham số đầu vào
2. Method overloading – Thay đổi số lượng tham số
Nếu các method có cùng tên, cùng kiểu dữ liệu của các tham số đầu vào nhưng khác nhau về số lượng thì xem là method overloading.
Ví dụ:
// File MethodOverload.java
public class MethodOverload {
int sum(int a, int b) {
return a + b;
}
int sum(int a, int b, int c) {
return a + b + c;
}
}
// File Main.java
public class Main {
public static void main(String[] args) {
MethodOverload methodOverload = new MethodOverload();
System.out.println("a + b = " + methodOverload.sum(1, 2));
System.out.println("a + b + c = " + methodOverload.sum(1,2,3));
}
}
Kết quả:
a + b = 3
a + b + c = 6
Chúng ta có 2 method đều có tên là sum, chúng đều có các tham số kiểu số nguyên int, nhưng là khác nhau về số lượng, cho nên vẫn được tính là 2 method khác nhau.
3. Method overloading – Thay đổi kiểu dữ liệu
Nếu các method cùng tên, cùng các tham số đầu nhưng khác kiểu dữ liệu thì vẫn được xem là method overloading.
Ví dụ:
// File MethodOverload.java
public class MethodOverload {
void display(int n) {
System.out.println("So nguyen: " + n);
}
void display(String str) {
System.out.println("Chuoi: " + str);
}
}
// File Main.java
public class Main {
public static void main(String[] args) {
MethodOverload methodOverload = new MethodOverload();
methodOverload.display(10);
methodOverload.display("Java is fun.);
}
}
Kết quả:
So nguyen: 10
Chuoi: Java is fun.
Chúng ta có 2 method display(), cả 2 đều có một tham số đầu vào thế nhưng lại khác kiểu dữ liệu.
4. Method overloading – Thay đổi trình tự kiểu dữ liệu của các tham số đầu vào
Các method có cùng tên, số lượng và kiểu dữ liệu nhưng khác nhau về trình tự sắp xếp cũng được xem là method overloading.
Ví dụ:
// File MethodOverload.java
public class MethodOverload {
void display(int n, String str) {
System.out.println("So nguyen: " + n);
System.out.println("Chuoi: " + str);
}
void display(String str, int n) {
System.out.println("So nguyen: " + n);
System.out.println("Chuoi: " + str);
}
}
// Main.java
public class Main {
public static void main(String[] args) {
MethodOverload methodOverload = new MethodOverload();
methodOverload.display(10, "java oop");
methodOverload.display("Java is fun.", 12);
}
}
Kết quả:
So nguyen: 10
Chuoi: java oop
So nguyen: 12
Chuoi: Java is fun.
Tóm tắt: Method cùng tên nhưng khác tham số đầu vào gọi là method overloading
5. Method overloading – Tự động chuyển kiểu dữ liệu (Type Promotion)
Type promotion là tính năng cho phép chuyển kiểu dữ liệu của tham số đầu vào từ loại nhỏ sang loại lớn hơn. Ví dụ chuyển từ byte sang short, short sang int, int sang long etc.
Trong method overloading, type promotion sẽ làm việc như sau, để làm rõ chúng ta hãy xem ví dụ bên dưới:
// File MethodOverload.java
public class MethodOverload {
void display(double b) {
System.out.println("Method display");
}
}
// File Main.java
public class Main {
public static void main(String[] args) {
MethodOverload methodOverload = new MethodOverload();
// Truyền vào một số kiểu float
methodOverload.display(10.4f);
}
}
Kết quả:
Method display
Rõ ràng là method display(double b), để gọi display() chúng ta cần truyền vào một số double, thế nhưng chúng ta truyền float vào vẫn được chấp nhận. Đó là do type promotion đã chuyển float sang double đấy các bạn.
Chúng ta đến ví dụ tiếp theo:
// File MethodOverload.java
public class MethodOverload {
void display(double b) {
System.out.println("Method display 1");
}
void display(float b) {
System.out.println("Method display 2");
}
}
// File Main.java
public class Main {
public static void main(String[] args) {
MethodOverload methodOverload = new MethodOverload();
// Truyền vào một số kiểu float
methodOverload.display(10.4f);
}
}
Kết quả:
Method display 2
Note: Type promotion chỉ thực hiện khi method chúng ta gọi không có kiểu dữ liệu tương ứng.
Chúng ta có method display(float b) cho nên khi chúng ta gọi display() truyền số float vào thì nó sẽ thực hiện đúng method display() có tham số là float.
Chúng ta có bản chuyển của type promotion sau:
byte -> short -> int -> long
short -> int -> long
int -> long -> float -> double
float -> double
long -> float -> double
6. Method overloading không hợp lệ
Nảy giờ chúng ta bàn luận, các bạn có tự hỏi liệu nếu các method cùng tên, khác tham số là method overloading. Còn nếu nó khác kiểu trả về thì sao?
public class MethodOverload {
void display(int b) {
System.out.println("Method one");
}
int display(int b) {
System.out.println("Method two");
return 1;
}
}
Cách viết trên sẽ báo lỗi compile, vì 2 method trên theo chúng ta thấy là chúng cũng có khác đó chứ, khác nhau kiểu trả về. Thế nhưng đây không phải là method overloading nhé các bạn. Nó sẽ gây lỗi và các bạn sẽ không compile được đâu.
Note: 2 method giống nhau (tên, tham số) nhưng khác kiểu trả về là không hợp lệ.
7. Kết
Như vậy chúng ta đã tìm hiểu xong về cách Nạp chồng phương thức (overloading method) trong lập trình Java. Cảm ơn các bạn đã theo dõi bài viết của mình. Chúc các bạn thành công. Hẹn gặp lại các bạn ở những chủ đề tiếp theo.
Nguồn:
https://shareprogramming.net/method-overloading-trong-java-voi-vi-du-cu-the/