Sự khác biệt giữa Overriding và Overloading

Anonim

Ghi đè & Tải quá tải

Phương pháp trọng và quá tải Quá tải là hai khái niệm / kỹ thuật / tính năng 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 cung cấp sự triển khai khác nhau cho các phương pháp có cùng tên. Phương pháp trọng cho phép lập trình cung cấp một sự thực hiện thay thế trong một lớp phụ cho một phương pháp đã được xác định bên trong lớp siêu của nó. Phương pháp quá tải cho phép lập trình cung cấp các hiện thực 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 học có thể mở rộng một lớp siêu hay một lớp cha mẹ, 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 pháp riêng của nó hoặc có thể tùy ý có triển khai riêng của mình cho các phương pháp đã được xác định trong lớp cha mẹ của nó (hoặc một trong các lớp học phụ huynh lớn của nó). Vì vậy, khi điều này xảy ra, nó được gọi là phương pháp trọng. Nói cách khác, nếu lớp con cung cấp một phương pháp thực hiện với một kiểu chữ ký và trả về giống như một phương pháp đã được định nghĩa trong một trong những lớp mẹ của nó, phương pháp đó được ghi đè bằng thay thế bằng việc thực hiện lớp con. Vì vậy, nếu có một phương pháp ghi đè trong một lớp học, hệ thống thời gian chạy sẽ phải quyết định việc triển khai phương pháp nào được sử dụng. Vấn đề này được giải quyết bằng cách nhìn vào loại chính xác của đối tượng được sử dụng để gọi nó. Nếu một đối tượng của lớp cha mẹ được sử dụng để gọi phương thức đã ghi đè thì việc thực hiện trong lớp cha mẹ 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 thực hiện 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 phương pháp trọng.

Quá tải là gì?

Phương pháp quá tải 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 pháp có cùng tên, nhưng với các loại đầ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 pháp bằng cách tạo ra một phương pháp khác có cùng tên nhưng với một phương thức khác hoặc một 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 sẽ bị quá tải. Sau đó, hệ thống sẽ phải quyết định cái nào được thực hiện khi nó được gọi. Sự khác biệt này được thực hiện bằng cách nhìn vào loại thông số được truyền vào phương pháp. Nếu đối số của type1, thì việc thực hiện đầu tiên được gọi, trong khi nếu nó là kiểu2 thì thực hiện thứ hai được gọi.

Sự khác nhau giữa Overriding và Overloading là gì?

Mặc dù phương pháp overriding và overload method được sử dụng để cung cấp một phương thức với sự 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 việc ghi đè phương pháp luôn ở trong các lớp khác nhau, trong khi đối tượng của quá tải trong cùng một lớp học. Điều đó có nghĩa là chỉ ghi đè được chỉ trong các ngôn ngữ lập trình hướng đối tượng cho phép thừa kế, trong khi quá tải có thể có sẵn trong một ngôn ngữ không theo định hướng đối tượng. Nói cách khác, bạn ghi đè lên 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 học của chính bạn.

Một sự khác biệt nữa là các phương pháp ghi đè có cùng tên phương pháp, chữ ký phương pháp và kiểu trả về, nhưng các phương pháp quá tải phải khác nhau trong chữ ký hoặc kiểu trả về (tên phải giống nhau). Để phân biệt giữa hai phương pháp ghi đè, loại đối tượng chính xác được sử dụng để gọi các id phương pháp được sử dụng, trong khi để phân biệt giữa hai phương thức 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 trong thời gian biên dịch, trong khi việc phân bổ được giải quyết khi chạy.