Hàm overload và hàm override: cách sử dụng và sự khác biệt


Sự khác biệt giữa override và overload trong Java thì phần lớn là ở các đoạn code rắc rối, nhưng nó lại khá là dễ hiểu. Bắt đầu bàn về hàm overload. Overload trong Java xuất hiện khi hai hoặc nhiều phương thức trong cung một lớp chia sẽ một cái tên chung hoặc ngay cả nếu một lớp con có chung tên với một hàm trong lớp cha của nó. Nhưng, thực tế để có hàm overload, hàm không chỉ có chung tên, nhưng còn có những điều kiện khác phải thõa mãn:

Giả thiết chúng ta có một lớp tên TestClass với 2 phương thức và cả hai phương thức đều có tên giống nhau là someMethod , ví dụ này được xem là hàm overload nếu ít nhất một trong hai điều sau đúng:

  1. Số lượng tham số trong các phương thức  khác nhau.
  2. Các loại dữ liệu của tham số khác nhau.

Như thế nào không phải là hàm overload

Phải hiểu rằng hàm overload thì không phải là thứ mà bạn thành lập bằng cách làm 2 việc sau

  1. Thay đổi kiểu dữ liệu trả về của hàm.
  2. Thay đổi tên của các tham số, nhưng không thay đổi kiểu dữ liệu của tham số.

Ví dụ:

//trường hợp này sẽ bị sai do kiểu dữ liệu trả về khác nhau
//mà số lượng tham số hay kiểu dữ liệu tham số không bị thay đổi
int changeDate(int Year) ;
float changeDate (int Year);
//trường hợp này sẽ bị sai do kiểu dữ liệu trả về khác nhau
//mà số lượng tham số hay kiểu dữ liệu tham số không bị thay đổi,
//chỉ thay đổi tên của tham số-coi như ko có ý nghĩa
int changeDate(int Month) ;
float changeDate(int Year);

//các trường hợp overload thành công

int changeDate(int Year, int Month) ;
int changeDate(int Year);

int changeDate(float Year) ;
int changeDate(int Year);

Xét về hàm override
Hàm override khác hoàn toàn các hàm overload. Nếu một lớp dẫn xuất cần một cài đặt khác cho các hàm của nó, thì các hàm đó có thể được định nghĩa lại trong lớp dẫn xuất. Đây được gọi là override. Một hàm override cần phải giống tên, kiểu dữ liệu trả về, số lượng tham số và kiểu dữ liệu của các tham số y như của lớp cha của nó vậy, và sự khác biệt duy nhất là phần cài đặt của phương thức.
Tóm lại, sự khác biệt giữa hàm override và hàm overload: khi dùng overload một hàm phải thay đổi ít nhất là giá trị các tham số hoặc là số lượng các tham số. Nhưng khi dùng override, hàm kế kế thừa từ lớp cha sẽ thay đổi phần cài đặt của nó.

2 thoughts on “Hàm overload và hàm override: cách sử dụng và sự khác biệt

  1. Pingback: Homepage

  2. truonglv174

    ý nghĩa của việc sử dụng overload là:
    ví dụ: bạn có 1 method dùng để connect đến n db server, theo lẽ thông thường thì bạn sẽ viết ra n method phục vụ việc kết nối
    connectDBSQL, connectDBOracle, connectDBMysql, …
    sẽ có nhiều hạn chế, thay vì đó bạn sử dụng kỹ thuật overload để chỉ cần viết method có tên là connectDB với các tham số truyền vào tương ứng

    Thân!

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.