Xem thêm

Java Bài 29: Nạp Chồng Phương Thức (Overloading)

Huy Erick
Chào mừng các bạn đến với bài học Java số 29! Hôm nay chúng ta sẽ tìm hiểu về Nạp chồng phương thức (Overloading). Đây là một khái niệm quan trọng trong lập trình Java,...

Chào mừng các bạn đến với bài học Java số 29! Hôm nay chúng ta sẽ tìm hiểu về Nạp chồng phương thức (Overloading). Đây là một khái niệm quan trọng trong lập trình Java, và chắc chắn sẽ giúp bạn hiểu rõ hơn về cách sử dụng nó.

Overloading và Overriding

Trước khi bắt đầu, chúng ta cùng nhớ lại khái niệm Overriding và Overloading. Overriding là khi một lớp con ghi đè phương thức của lớp cha, trong khi Overloading là khả năng nạp chồng nhiều phương thức có cùng tên trong cùng một lớp.

Dễ nhầm lẫn phải không? Nhưng đừng lo, chúng ta sẽ đi vào chi tiết hơn để bạn hiểu rõ hơn về Overloading.

Overloading - Định nghĩa và ưu điểm

Overloading là khả năng định nghĩa ra nhiều phương thức (bao gồm constructor) có cùng tên trong một lớp, nhưng khác nhau về tham số truyền vào. Điều này làm tăng tính linh hoạt và sử dụng hiệu quả của các phương thức trong một lớp.

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

public class HinhTron {
    private float banKinh;

    // Constructor không tham số
    public HinhTron() {
        this.banKinh = 0;
    }

    // Constructor một tham số banKinh
    public HinhTron(float banKinh) {
        this.banKinh = banKinh;
    }

    // Phương thức không tham số
    public float tinhChuVi() {
        // return kết quả tính chu vi
    }

    // Phương thức một tham số donVi
    public float tinhChuVi(int donVi) {
        // return kết quả tính chu vi dựa vào tham số donVi truyền vào
    }
}

Trong ví dụ trên, chúng ta có hai constructor và hai phương thức có cùng tên tinhChuVi(), nhưng khác nhau về tham số. Đó chính là Overloading, cho phép chúng ta "xếp chồng" các constructor và phương thức này như những tầng trên nhau.

Overloading và Overriding - Điểm khác biệt

Quan trọng nhất là phải hiểu rõ sự khác biệt giữa Overloading và Overriding. Dễ nhầm lẫn nhất là tên phương thức trùng nhau, nhưng hai khái niệm này hoàn toàn khác nhau.

Overriding yêu cầu bạn đặt tên phương thức trong lớp con trùng với tên phương thức trong lớp cha và các tham số truyền vào cũng phải trùng nhau. Trong khi đó, Overloading chỉ đòi hỏi bạn đặt tên các phương thức trong một lớp trùng nhau, không liên quan gì đến lớp cha, và các tham số truyền vào các phương thức này phải khác nhau.

Đôi khi có thể làm bạn đau đầu, nhưng bạn sẽ nhanh chóng làm quen với hai khái niệm này khi thao tác nhiều với chúng.

Hiệu quả của Overloading

Mặc dù Overloading không có tác dụng ngay trên lớp đó, ví dụ như làm cho code gọn gàng hoặc dễ quản lý, nó lại phát huy tác dụng rất lớn khi gọi các phương thức từ các lớp khác.

Overloading giúp tăng tính hiệu quả sử dụng của lớp đó. Hãy cùng xem một vài ví dụ:

  • Kỹ thuật Overloading được áp dụng trong việc khởi tạo các đối tượng của lớp StringBuffer hoặc StringBuilder. Khi bạn khởi tạo chúng, bạn sẽ nhận thấy danh sách các constructor được nạp chồng như hình dưới đây.

Nạp chồng constructor đối với lớp StringBuffer

  • Mỗi khi bạn gọi phương thức println() để in dữ liệu ra console, bạn sẽ thấy rất nhiều các phương thức println() được nạp chồng cùng tên. Điều này giúp bạn dễ dàng xuất ra console bất kỳ dữ liệu nào mà bạn muốn, chỉ cần sử dụng một phương thức println() duy nhất.

Nạp chồng phương thức println()

Overloading không chỉ giúp tạo ra code dễ nhớ và dễ áp dụng, mà còn giúp tăng tính linh hoạt và hiệu quả của lớp bạn.

Tổng kết

Chúc mừng! Bạn đã nắm vững khái niệm Overloading và hiểu rõ sự khác biệt giữa Overloading và Overriding. Đây là những kiến thức quan trọng trong lập trình Java, và sẽ giúp bạn trở thành một lập trình viên giỏi.

Trong bài học tiếp theo, chúng ta sẽ làm quen với khái niệm đa hình (polymorphism), một trong những đặc tính nổi trội khác của lập trình hướng đối tượng. Hãy tiếp tục theo dõi!

1