Overloading tạm hiểu là phương thức nạp chồng trong Java. Nhưng đó là khái niệm nếu bạn chỉ lướt qua thôi thì không thể hiểu được. Vì vậy bài này mình sẽ cùng bạn đi tìm câu trả lời cho Overloading trong Java dùng để làm gì và sử dụng như thế nào.
Overloading trong Java là gì?
Overloading là nhiều phương thức (Method) trong một lớp (Class) dùng chung tên nhưng tham số truyền vào lại khác nhau.
Hãy trở về thế giới thực tại và xem xét ví dụ sau:
Bạn có một chiếc xe đạp. Khi đạp phanh thì xe sẽ dừng lại. Phương thức phanh sẽ đại diện cho hành vi dừng xe.
Với một chiếc ô tô cũng với phương thức phanh nhưng nó lại được sử dụng bằng tay.
Như bạn thấy đấy 2 đối tượng xe đạp và ô tô đều dùng phương thức phanh. Tuy rằng hành động là khác nhau.
Hãy liên hệ với đối tượng trong Java. Nếu hành vi của nhiều phương thức có cùng tên thực hiện và cùng một việc nhưng có số lượng tham số hoặc các loại tham số khác nhau, nó được gọi là Overloading.
Quy tắc Overloading trong Java
Sau đây là danh sách các quy tắc mà phương thức nạp chồng có thể được thực hiện trong Java.
- Tên phương thức phải giống nhau
- Các tham số phải khác nhau, tức là mỗi phương thức nạp chồng phải nhận một danh sách các kiểu tham số duy nhất.
Kiểu 1:
void run(int numberA, int numberB); // Có hai tham số a và b với kiểu dữ liệu int. void run(int numberA, float numberB); // Ở đây, hai tham số a, b với kiểu dữ liệu int và float. Kiểu dữ liệu khác nhau trong cả hai trường hợp.
Giả sử khi thêm đối số int run(10, 20) thì chương trình sẽ chạy cái đầu tiên.
Tiếp theo run(10, 20.5f), thì JVM sẽ thực thi phương thức thứ hai.
Kiểu 2:
void number(int a, int b); // Hai tham số a và b với kiểu dữ liệu int. void number(int a, int b, int c); // Ba tham số a, b, c với kiểu dữ liệu int. Ở đây, số lượng tham số là khác nhau nhưng kiểu dữ liệu thì giống nhau.
Kiểu 3:
void myNum(int a, double b); void myNum(double a, float a);
Như bạn thấy, chuỗi kiểu dữ liệu của các tham số là khác nhau.
Hãy thực hiện ví dụ sau:
public class PhuongTien { public PhuongTien() { // Constructor } void phanh(String hanhvi) { System.out.println("Xe đạp đã phanh"); } void phanh(int hanhvi) { System.out.println("Xe ô tô đã phanh"); } public static void main(String[] args) { PhuongTien obj = new PhuongTien(); obj.phanh("Đạp phanh"); } }
Khi truyền đối số vào phanh(“Đạp phanh”) kiểu String thì phương thức đầu tiên đã được thực thi.
Tiếp theo mình thay đổi đối số phanh(10) thành kiểu int. Thì lúc này phương thức thức hai được thực thi.
Lợi thế của việc sử dụng Overloading trong Java
- Giúp làm tăng khả năng đọc, hiểu chương trình
- Nó giúp đạt được tính đa hình thời gian biên dịch
- Giúp tránh lặp lại cùng một đoạn mã trong các phương pháp khác nhau
Kết thúc bài học về Overloading bạn cảm thấy nó có khó không? Hi vọng với bài viết này đã giúp bạn hiểu rõ hơn về phương thức nạp chồng trong lập trình hướng đối tượng Java rồi.