Ghi đè so với quá tải
Phương thức Ghi đè và Phương thức Quá tải 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 cho phép lập trình viên cung cấp các 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 triển khai thay thế trong một lớp con cho một phương thức đã được xác định bên trong siêu lớp của nó. Quá tải 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 tùy ý có thể 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 lớn của nó). Vì vậy, khi điều sau xảy ra, nó được gọi là phương thức ghi đè. 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 định nghĩa 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 thực hiện lớp con . Vì vậy, nếu có một phương thức được ghi đè trong một lớp, hệ thống thời gian chạy sẽ phải quyết định thực hiện 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 chính xác loại đối tượng đượ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 bị ghi đè, thì việc thực hiện trong lớp cha đượ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 lớp con đượ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ì?
Quá tải 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 hơn một phương thức có cùng tên, nhưng với cá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ể quá tải 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 với 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ó phương thức1 (type1 t1) và phương thức1 (type2 t2) trong cùng một lớp, thì chúng bị quá tải. 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 loại (các) tham số được truyền vào phương thức. Nếu đối số là kiểu 1, thì thực hiện đầu tiên được gọi, trong khi nếu nó là kiểu 2, thì thực hiện thứ hai được gọi.
Sự khác biệt giữa Overriding và Overloading 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 triển khai khác nhau, có những 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 phương thức ghi đè luôn nằm trong các lớp khác nhau, trong khi các đối tượng của quá tải phương thức ở trong cùng một lớp. Điều đó có nghĩa là ghi đè chỉ có thể có trong các ngôn ngữ lập trình hướng đối tượng cho phép kế thừa, trong khi quá tải cũng có thể có sẵn 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 siêu lớp nhưng bạn quá tải một phương thức trong lớp của riêng bạn.
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 bị quá tải 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 được 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 bị quá tải, các loại tham số được sử dụng. Một điểm khác biệt chính là quá tải được giải quyết tại thời gian biên dịch, trong khi ghi đè được giải quyết trong thời gian chạy.