Overriding vs Overloading
Phương thức Ghi đè và Nạp chồng phương thức là hai khái niệm / kỹ thuật / tính năng được tìm thấy trong một số ngôn ngữ lập trình. Cả hai khái niệm đều cho phép lập trình viên cung cấp các cách triển khai khác nhau cho các phương thức có cùng tên. Ghi đè phương thức cho phép lập trình viên cung cấp một cách triển khai thay thế trong một lớp con cho một phương thức đã được định nghĩa bên trong siêu lớp của nó. Nạp chồng phương thức cho phép lập trình viên cung cấp các triển khai khác nhau cho nhiều phương thức có cùng tên (trong cùng một lớp).
Ghi đè là gì?
Như đã đề cập ở trên, một lớp có thể mở rộng một siêu lớp hoặc một lớp cha, trong các ngôn ngữ lập trình hướng đối tượng. Một lớp con có thể có các phương thức riêng của nó hoặc có thể tùy chọn có các triển khai riêng của nó đối với các phương thức đã được định nghĩa trong lớp cha của nó (hoặc một trong các lớp cha của nó). Vì vậy, khi điều sau xảy ra, nó được gọi là ghi đè phương thức. Nói cách khác, nếu lớp con cung cấp một triển khai cho một phương thức có cùng chữ ký và kiểu trả về như một phương thức đã được xác định trong một trong các lớp cha của nó, thì phương thức đó được cho là bị ghi đè (thay thế) bởi việc triển khai của lớp con.. Vì vậy, nếu có một phương thức bị ghi đè trong một lớp, hệ thống thời gian chạy sẽ phải quyết định việc triển khai phương thức nào được sử dụng. Vấn đề này được giải quyết bằng cách xem xét loại đối tượng chính xác được sử dụng để gọi nó. Nếu một đối tượng của lớp cha được sử dụng để gọi phương thức ghi đè, thì việc triển khai trong lớp cha sẽ được sử dụng. Tương tự, nếu nó là một đối tượng của lớp con được sử dụng, thì việc triển khai của lớp con sẽ được sử dụng. Các ngôn ngữ lập trình hiện đại như Java, Eifell, C ++ và Python cho phép ghi đè phương thức.
Quá tải là gì?
Nạp chồng phương thức là một tính năng được cung cấp bởi một số ngôn ngữ lập trình để tạo nhiều phương thức có cùng tên, nhưng có kiểu đầu vào và đầu ra khác nhau. Trong các ngôn ngữ lập trình hiện đại như Java, C, C ++ và VB. NET, tính năng này có sẵn. Bạn có thể nạp chồng một phương thức bằng cách tạo một phương thức khác có cùng tên nhưng có chữ ký phương thức khác hoặc kiểu trả về khác (hoặc cả hai). Ví dụ: nếu bạn có method1 (type1 t1) và method1 (type2 t2) bên trong cùng một lớp, thì chúng được nạp chồng. Sau đó, hệ thống sẽ phải quyết định cái nào sẽ được thực thi khi nó được gọi. Sự khác biệt này được thực hiện bằng cách xem xét loại (các) tham số được truyền vào phương thức. Nếu đối số thuộc kiểu1, thì triển khai đầu tiên được gọi, trong khi nếu đối số thuộc kiểu2, thì triển khai thứ hai được gọi.
Sự khác biệt giữa Ghi đè và Quá tải là gì?
Mặc dù, ghi đè phương thức và nạp chồng phương thức được sử dụng để cung cấp một phương thức với các cách triển khai khác nhau, có sự khác biệt chính giữa hai khái niệm / kỹ thuật này. Trước hết, các đối tượng của ghi đè phương thức luôn nằm trong các lớp khác nhau, trong khi các đối tượng của ghi đè phương thức nằm trong cùng một lớp. Điều đó có nghĩa là chỉ có thể ghi đè trong các ngôn ngữ lập trình hướng đối tượng cho phép kế thừa, trong khi ghi đè cũng có thể có trong một ngôn ngữ không hướng đối tượng. Nói cách khác, bạn ghi đè một phương thức trong lớp siêu cấp nhưng bạn lại ghi đè một phương thức trong lớp của chính mình.
Một điểm khác biệt nữa là các phương thức được ghi đè có cùng tên phương thức, chữ ký phương thức và kiểu trả về, nhưng các phương thức được nạp chồng phải khác nhau về chữ ký hoặc kiểu trả về (tên phải giống nhau). Để phân biệt giữa hai phương thức bị ghi đè, loại đối tượng chính xác được sử dụng để gọi id phương thức được sử dụng, trong khi để phân biệt giữa hai phương thức được nạp chồng, loại tham số được sử dụng. Một sự khác biệt chính khác là quá tải được giải quyết tại thời điểm biên dịch, trong khi ghi đè được giải quyết trong thời gian chạy.