Les diferències entre la sobrecàrrega de mètodes i la substitució de mètodes a Java són les següents:
Sobrecàrrega del mètode | Anulació del mètode |
|---|---|
| La sobrecàrrega de mètodes és un polimorfisme en temps de compilació. | La substitució del mètode és un polimorfisme en temps d'execució. |
| La sobrecàrrega de mètodes ajuda a augmentar la llegibilitat del programa. | La substitució del mètode s'utilitza per atorgar la implementació específica del mètode que ja proporciona la seva classe o superclasse pare. |
| Es produeix dins de la classe. | Es realitza en dues classes amb relacions d'herència. |
| La sobrecàrrega del mètode pot requerir o no l'herència. | La substitució del mètode sempre necessita herència. |
| En la sobrecàrrega de mètodes, els mètodes han de tenir el mateix nom i signatures diferents. | En la substitució de mètodes, els mètodes han de tenir el mateix nom i la mateixa signatura. |
| En la sobrecàrrega de mètodes, el tipus de retorn pot o no ser el mateix, però només hem de canviar el paràmetre. | En la substitució del mètode, el tipus de retorn ha de ser el mateix o covariant. |
| S'està utilitzant la vinculació estàtica per a mètodes sobrecarregats. | S'està utilitzant l'enllaç dinàmic per anul·lar mètodes. |
| Rendiment baix a causa del polimorfisme del temps de compilació. | Dóna un millor rendiment. El motiu d'això és que l'enllaç dels mètodes anul·lats s'està realitzant en temps d'execució. |
| Els mètodes privats i finals es poden sobrecarregar. | Els mètodes privats i finals no es poden anul·lar. |
| La llista d'arguments hauria de ser diferent mentre es fa una sobrecàrrega de mètodes. | La llista d'arguments hauria de ser la mateixa en la substitució del mètode. |
Sobrecàrrega de mètodes a Java
Sobrecàrrega del mètode és un Polimorfisme de temps de compilació . En la sobrecàrrega de mètodes, més d'un mètode comparteix el mateix nom de mètode amb una signatura diferent a la classe. En la sobrecàrrega de mètodes, el tipus de retorn pot o no ser el mateix, però hem de canviar el paràmetre perquè, en java, no podem aconseguir una sobrecàrrega de mètode canviant només el tipus de retorn del mètode.
Exemple de sobrecàrrega de mètodes:
Java
// Java Program to Implement // Method Overloading import java.io.*; class MethodOverloadingEx { static int add(int a, int b) { return a + b; } static int add(int a, int b, int c) { return a + b + c; } // Main Function public static void main(String args[]) { System.out.println('add() with 2 parameters'); // Calling function with 2 parameters System.out.println(add(4, 6)); System.out.println('add() with 3 parameters'); // Calling function with 3 Parameters System.out.println(add(4, 6, 7)); } }> Sortida
add() with 2 parameters 10 add() with 3 parameters 17>
Anulació de mètodes a Java
Anulació del mètode és un Polimorfisme en temps d'execució . En la substitució de mètodes, la classe derivada proporciona la implementació específica del mètode que ja proporciona la classe base o la classe pare. En la substitució del mètode, el tipus de retorn ha de ser el mateix o covariant (el tipus de retorn pot variar en la mateixa direcció que la classe derivada).
Exemple de substitució del mètode:
Java // Java Program to implement // Method Overriding import java.io.*; // Base Class class Animal { void eat() { System.out.println('eat() method of base class'); System.out.println('eating.'); } } // Inherited Class class Dog extends Animal { void eat() { System.out.println('eat() method of derived class'); System.out.println('Dog is eating.'); } } // Driver Class class MethodOverridingEx { // Main Function public static void main(String args[]) { Dog d1 = new Dog(); Animal a1 = new Animal(); d1.eat(); a1.eat(); // Polymorphism: Animal reference pointing to Dog object Animal animal = new Dog(); // Calls the eat() method of Dog class animal.eat(); } }> Sortida
eat() method of derived class Dog is eating. eat() method of base class eating. eat() method of derived class Dog is eating.>
Explicació del programa anterior:
Aquí, podem veure que un mètode eat() s'ha substituït al nom de la classe derivada gos que ja és proporcionada pel nom de la classe base Animal . Quan creem la instància de la classe Dog i cridem al mètode eat(), veiem que només s'executa el mètode eat() de la classe derivada en lloc del mètode de classe base eat(), i quan creem la instància de la classe Animal i cridem al eat(). ), veiem que només s'executa el mètode de classe base eat() en lloc del mètode de classe derivat eat().