Bạn Đã Phân Biệt Được Overriding và Overloading?

Overloading (Nạp chồng phương thức) và Overriding (ghi đè phương thức) là hai khái niệm cơ bản trong lập trình mà bất kì newbie nào cũng cần phân biệt. Vậy chúng là gì? Khác nhau thế nào? Hãy cùng mình phân tích và tìm hiểu nhé.

Overloading (Nạp chồng phương thức) là gì?

Overloading là một kĩ thuật cho phép trong cùng một class có thể có nhiều phương thức cùng tên nhưng khác nhau về số lượng tham số hoặc kiểu dữ liệu tham số. Ví dụ chúng ta có hàm tinhTong dùng để cộng hai số nguyên. Khi muốn cộng ba số nguyên không lẽ tôi lại phải viết một hàm với tên khác(chẳng hạn tinhTong1) và truyền vào 3 số nguyên hay sao? Như vậy thì code sẽ trở nên phức tạp hơn trong khi hai hàm có cùng một mục đích là cộng các số nguyên lại với nhau. Như vậy chúng ta sẽ overload hàm tinhTong như sau:

Khi gọi hàm tinhTong và truyền vào số lượng tham số khác nhau thì sẽ gọi tới hàm có số lượng tham số tương ứng

Chú ý vào hành lang cửa số ” Watch 1 ” ta thấy giá trị của hai biến a và b lần lượt là giá trị trả về của hai hàm tinhTong ( int a, int b ) và hàm tinhTong ( int a, int b, int c )

Tương tự chứ ta có thể overload kiểu dữ liệu của tham số. Thay vì hàm tinhTong cộng hai số nguyên thì tôi cũng có thể cộng hai số thực, chỉ cần truyền vào 2 tham số kiểu double.

Tương tự giá trị biến c là giá trị trả về của hàm tinhTong ( double a, double b ) sau khi truyền vào hai tham số kiểu double .

Tạo constructor với số lượng tham số khác nhau cũng là một dạng của oveloading .

Overriding (Ghi đè phương thức) là gì?

Overrding ( tên rất đầy đủ là Method Overriding ), được sử dụng trong trường hợp lớp con thừa kế từ lớp cha và muốn định nghĩa lại một phương pháp đã xuất hiện ở lớp cha. Một lớp cha thường thì hoàn toàn có thể có nhiều lớp con thừa kế, tuy nhiên phương pháp ở lớp cha hoàn toàn có thể tương thích với lớp con này nhưng không tương thích với lớp con khác, do đó lớp con cần ghi đè lại phương pháp đó cho tương thích. Ví dụ class Animal có phương pháp animalSound đại diện thay mặt cho tiếng kêu của động vật hoang dã. Class Dog và Cat kế thừa từ class Animal, nhưng chó và mèo có tiếng kêu khác nhau nên phải implement phương pháp animalSound cho mỗi lớp khác nhau. Vì vậy cần phải ghi đè lại phương pháp animalSound ở hai lớp Dog và Cat bằng cách sử dụng từ khóa override như sau ( chú ý quan tâm ví dụ minh họa sử dụng code C #, những ngôn từ khác nhau sẽ overriding theo cú pháp khác nhau nhưng về thực chất là như nhau ) .

Ở hàm main tạo instance của class Animal, Dog và Cat sẽ cho hiệu quả như sau .

=> Kết quả

So sánh

Overloading
Overriding

Thể hiện đa hình tại compile time
Thể hiện đa hình tại runtime

Thêm hành vi cho phương thức
Thay đổi hành vi hiện tại của phương thức

Có thể khác nhau về số lượng và kiểu dữ liệu của tham số
Số lượng và kiểu dữ liệu của tham số phải giống nhau

Xảy ra trong cùng một class
Xảy ra ở 2 class có quan hệ kế thừa

Hi vọng qua bài viết này bạn bè sẽ hiểu rõ hơn và không còn nhầm lẫn giữa hai khái niệm này nữa. Thanks ~

Rate this post