Method Overloading trong JAVA

0
2011
Method Overloading trong Java

Nếu một class có nhiều phương thức có cùng tên, nhưng đối số khác nhau, nó được gọi là Method Overloading.

Method Overloading trong Java
Tìm hiểu về Method Overloading trong Java

Đây là phương pháp tăng khả năng đọc của chương trình bằng cách chúng ta chỉ sử dụng một phương thức.

Giả sử bạn phải thực hiện một phép cộng, nhưng có thể chấp nhận bất kỳ đối số.

Ở trường hợp này, nếu bạn viết những phương pháp như là:

  • a(int, int) cho hai đối số
  • và b(int, int, int) cho ba đối số

… sẽ dẫn đến khá là khó khăn để đọc được hành vi của chúng vì tên các phương thức khác nhau.

Vì thế, chúng ta thực hiện nạp chồng phương thức (Method Overloading) để lập trình nhanh hơn.

Có 2 cách để thực hiện nạp chồng phương thức:

  • Thay đổi số lượng đối số
  • Thay đổi kiểu dữ liệu

Lưu ý: Trong java, là không thể thực hiện nạp chồng phương thức chỉ bằng cách thay đổi kiểu trả về của phương thức.

Ví dụ thực hiện Method Overloading bằng cách thay đổi số lượng đối số

Trong ví dụ này, chúng ta đã tạo hai phương thức, phương thức add() đầu tiên thực hiện phép cộng hai số và phương thức add thứ hai thực hiện phép cộng ba số.

Trong ví dụ này, chúng ta đang tạo các phương thức static để chúng tôi không cần tạo đối tượng khi gọi phương thức trong main.

class Adder{
  
  // Phương thức cộng 2 số
  static int add(int a, int b){
    return a + b;
  } 
  // Phương thức cộng 3 số 
  static int add(int a, int b, int c){
    return a + b + c;
  }
}

class TestOverloading1{  
  public static void main(String[] args){
    System.out.println(Adder.add(10, 20));
    System.out.println(Adder.add(10, 20, 30));
  }
}

Kết quả:

30
60

Ví dụ thực hiện Method Overloading bằng cách thay đổi số kiểu dữ liệu

class Adder{
  
  // Phương thức cộng 2 số nguyên
  static int add(int a, int b){
    return a + b;
  } 
  // Phương thức cộng 2 số thập phân
  static double add(double a, double b){
    return a + b;
  }
}

class TestOverloading2{  
  public static void main(String[] args){
    System.out.println(Adder.add(10, 20));
    System.out.println(Adder.add(10.2, 10.3));
  }
}

Kết quả:

30
20.5

Câu hỏi 1: Tại sao không thể nạp chồng phương thức bằng cách thay đổi kiểu trả về của phương thức?

Trong Java, nạp chồng phương thức là không thể bằng cách thay đổi kiểu trả về của phương thức vì sự mơ hồ.

Chúng ta hãy xem sự mơ hồ có thể xảy ra như thế nào:

class Adder{
  
  // Phương thức cộng 2 số nguyên
  static int add(int a, int b){
    return a + b;
  } 
  // Phương thức cộng 2 số thập phân
  static double add(double a, double b){
    return a + b;
  }
}

class TestOverloading3{
  public static void main(String[] args){
    System.out.println(Adder.add(10, 10)); // Không rõ ràng
  }
}

Kết quả:

Compile Time Error: method add(int, int) is already defined in class Adder

Lưu ý: Lỗi thời gian biên dịch tốt hơn lỗi runtime. Vì vậy, trình biên dịch java biểu hiện lỗi compiler time error nếu bạn khai báo cùng một phương thức có cùng tham số.

Câu hỏi 2: Chúng ta có thể nạp chồng phương thức main không?

Câu trả lời là CÓ.

Bạn có thể có bất kỳ số lượng phương thức main nào trong một class bằng cách nạp chồng phương thức.

Nhưng JVM gọi phương thức main() chỉ nhận mảng chuỗi dưới dạng đối số.

Hãy xem ví dụ đơn giản:

class TestOverloading4{
 
  public static void main(String[] args){
    System.out.println("main with String[]");
  }

  public static void main(String args){
    System.out.println("main with String");
  }  
  
  public static void main(){
    System.out.println("main without args");
  }  
} 

Kết quả:

main with String[]

Bạn đã hiểu về Method Overloading chưa?

Vậy là bạn đã biết cách tối ưu hóa khả năng đọc của chương trình Java bằng cách thực hiện Method Overloading.

Chúc bạn học lập trình Java tốt!

JavaDEV