Nạp Chồng Phương Thức Trong Java
Có thể bạn quan tâm
Nếu một lớp có nhiều phương thức cùng tên nhưng có số tham số khác nhau, thì đó là nạp chồng phương thức (Method Overloading). Nếu bạn phải thực hiện chỉ một hoạt động, có cùng tên phương thức, thì kỹ thuật này làm tăng tính có thể đọc cho chương trình. Giả sử bạn viết phương thức như a(int, int) cho hai tham số, và b(int, int, int) cho ba tham số, thì khi đó điều này có thể gây khó khăn cho bạn cũng như cho các lập trình viên khác để hiểu hành vi của phương thức, bởi vì tên của nó là khác nhau. Vì thế, chúng ta thực hiện nạp chồng phương thức để giúp việc phân tích chương trình nhanh hơn.
Có hai cách để nạp chồng phương thức trong Java, đó là:
Bằng việc thay đổi số tham số
Bằng việc thay đổi kiểu dữ liệu
Ghi chú: Trong Java, nạp chồng phương thức là không thể bằng việc thay đổi kiểu trả về của phương thức.
Ví dụ về nạp chồng phương thức bằng cách thay đổi số tham số
Trong ví dụ này, chúng ta sử dụng nạp chồng phương thức: phương thức sum đầu tiên thực hiện phép cộng hai số và phương thức sum thứ hai thực hiện phép cộng ba số.
Quảng cáo class Calculation{ void sum(int a,int b){System.out.println(a+b);} void sum(int a,int b,int c){System.out.println(a+b+c);} public static void main(String args[]){ Calculation obj=new Calculation(); obj.sum(10,10,10); obj.sum(20,20); } }Kết quả là:
Output:30 40 Quảng cáoVí dụ nạp chồng phương thức bằng cách thay đổi kiểu dữ liệu của tham số
Trong ví dụ này, chúng ta sử dụng nạp chồng phương thức mà khác nhau về kiểu dữ liệu. Phương thức sum đầu tiên nhận hai số nguyên và phương thức sum thứ hai nhận hai số thực double.
class Calculation2{ void sum(int a,int b){System.out.println(a+b);} void sum(double a,double b){System.out.println(a+b);} public static void main(String args[]){ Calculation2 obj=new Calculation2(); obj.sum(10.5,10.5); obj.sum(20,20); } }Kết quả là:
Output:21.0 40Câu hỏi: Tại sao 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?
Bởi vì việc này có thể gây ra tính lưỡng nghĩa, mơ hồ (ambiguity). Bạn theo dõi ví dụ sau để thấy rõ điều này:
Kết quả là:
class Calculation3{ int sum(int a,int b){System.out.println(a+b);} double sum(int a,int b){System.out.println(a+b);} public static void main(String args[]){ Calculation3 obj=new Calculation3(); int result=obj.sum(20,20); //Gay ra Compile Time Error } }Trong dòng code này: int result=obj.sum(20,20); thì Java có thể quyết định phương thức sum() nào nên được gọi?
Câu hỏi: Chúng ta có thể nạp chồng phương thức main()?
Có. Bạn có thể có bất kỳ số lượng phương thức main nào trong môt lớp bởi nạp chồng phương thức. Bạn theo dõi ví dụ đơn giản sau:
class Overloading1{ public static void main(int a){ System.out.println(a); } public static void main(String args[]){ System.out.println("Phuong thuc main() duoc trieu hoi"); main(10); } }Nạp chồng phương thức và TypePromotion trong Java
Một kiểu được promote thành một kiểu khác hoàn toàn nếu không tìm thấy kiểu dữ liệu nào được kết nối. Bạn theo dõi sơ đồ sau để hiểu khái niệm này.
Như sơ đồ trên, byte có thể được promote thành short, int, long, float, hoặc double. Kiểu dữ liệu short có thể được promote thành int, long, float, hoặc double. Kiểu dữ liệu char có thể được promote thành kiểu int, long, float hoặc double và …
Ví dụ về nạp chồng phương thức với TypePromotion:
class OverloadingCalculation1{ void sum(int a,long b){System.out.println(a+b);} void sum(int a,int b,int c){System.out.println(a+b+c);} public static void main(String args[]){ OverloadingCalculation1 obj=new OverloadingCalculation1(); obj.sum(20,20); //Bay gio int literal thu hai se duoc promote thanh long obj.sum(20,20,20); } }Ví dụ về nạp chồng phương thức với TypePromotion nếu kết nối là không được tìm thấy
Nếu có kết nối về các tham số kiểu trong phương thức, thì TypePromotion không được thực hiện.
class OverloadingCalculation2{ void sum(int a,int b){System.out.println("phuong thuc int arg duoc trieu hoi");} void sum(long a,long b){System.out.println("phuong thuc long arg duoc trieu hoi");} public static void main(String args[]){ OverloadingCalculation2 obj=new OverloadingCalculation2(); obj.sum(20,20); //Bay gio phuong thuc int arg sum() duoc trieu hoi } }Ví dụ về nạp chồng phương thức với TypePromotion trong trường hợp lưỡng nghĩa
Nếu không có kết nối các tham số kiểu trong phương thức, và mỗi phương thức promote số tham số giống nhau, thì đó là trường hợp lưỡng nghĩa.
class OverloadingCalculation3{ void sum(int a,long b){System.out.println("Phuong thuc a duoc trieu hoi");} void sum(long a,int b){System.out.println("Phuong thuc b duoc trieu hoi");} public static void main(String args[]){ OverloadingCalculation3 obj=new OverloadingCalculation3(); obj.sum(20,20); //Khong co tinh luong nghia o day } }Kết quả là:
Output:Compile Time ErrorPs:Overload các bạn có thể hiểu 2 hay nhiều hàm cùng tên mà khác số lượng tham số hoặc khác kiểu tham số.
👉 Giải bài nhanh với AI Hay:Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.
Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:
Các bạn có thể mua thêm khóa học JAVA CORE ONLINE VÀ ỨNG DỤNG cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập doanh nghiệp với Java. Khóa học có giá chỉ 400K, nhằm ưu đãi, tạo điều kiện cho sinh viên cho thể mua khóa học.
Nội dung khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại https://www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp chị Thu, trợ lý anh Tuyền để hỗ trợ thanh toán qua mã QR ngân hàng Việt Nam, fb: https://www.facebook.com/Thule.59
Anh Tuyền, tác giả khóa học, là cựu sinh viên chương trình đào tạo kĩ sư tài năng của đại học Bách Khoa Hà Nội với hơn 5 năm kinh nghiệm đi làm thực tế doanh nghiệp và cũng là Founder website vietjack.com, web giáo dục phổ biến nhất Việt Nam hiện tại (năm 2025). Java cũng là ngôn ngữ lập trình dễ đi xin việc nhất hiện tại, với mức lương cao, hãy nâng cao kiến thức IT của bản thân mình vì một Việt Nam giàu mạnh.
Loạt bài hướng dẫn của chúng tôi dựa một phần trên nguồn tài liệu của: Tutorialspoint.com
Bài học Java phổ biến tại vietjack.com:
Nạp chồng phương thức (Overloading)
Constructor
ArrayList trong Java
Interface trong Java
Thread trong Java
247 bài tập Java
200 câu phỏng vấn Java
160 bài học ngữ pháp tiếng Anh hay nhất
155 bài học Java tiếng Việt hay nhất
100 bài học Android tiếng Việt hay nhất
247 bài học CSS tiếng Việt hay nhất
197 thẻ HTML cơ bản
297 bài học PHP
101 bài học C++ hay nhất
97 bài tập C++ có giải hay nhất
208 bài học Javascript có giải hay nhất
Từ khóa » Sử Dụng Overloading Trong Java
-
Java Bài 29: Nạp Chồng Phương Thức (Overloading)
-
Overriding Và Overloading Trong Java - Freetuts
-
Sự Khác Nhau Giữa Overloading Và Overriding Trong Java - VietTuts
-
Nạp Chồng Phương Thức Trong Java - VietTuts
-
Overloading Method - Nạp Chồng Hàm Trong Java - STDIO
-
Overriding Và Overloading Trong Java | How Kteam
-
Xây Dựng Lớp Trong Java Với Nạp Chồng (overloading) Và Kết Tập ...
-
Hiểu Overloading Và Overriding Thông Qua Vật Phẩm Game - Viblo
-
Bạn Đã Phân Biệt Được Overriding Và Overloading? - CodeLearn
-
Method Overloading Trong JAVA
-
Overloading Trong Java | Phần 2 - Lập Trình Hướng Đối Tượng
-
Java 43. Nạp Chồng Phương Thức - Overloading Trong Java
-
Method Overloading Trong Java Với Ví Dụ Cụ Thể - Deft Blog
-
Overloading Trong Java - Quách Quỳnh