logo

Verschil tussen methode-overbelasting en methode-overschrijving in Java

De verschillen tussen Method Overloading en Method Overriding in Java zijn als volgt:

Methode Overbelasting



Methode overschrijven

Overbelasting van methoden is een polymorfisme tijdens het compileren.Het overschrijven van methoden is een runtime-polymorfisme.
Overbelasting van methoden helpt de leesbaarheid van het programma te vergroten.Methode-overschrijving wordt gebruikt om de specifieke implementatie van de methode toe te staan, die al wordt geleverd door de bovenliggende klasse of superklasse.
Het gebeurt binnen de klas.Het wordt uitgevoerd in twee klassen met overervingsrelaties.
Overbelasting van methoden kan al dan niet overerving vereisen.Voor het overschrijven van de methode is altijd overerving nodig.
Bij overbelasting van methoden moeten methoden dezelfde naam en verschillende handtekeningen hebben.Bij het overschrijven van methoden moeten methoden dezelfde naam en dezelfde handtekening hebben.
Bij overbelasting van methoden kan het retourtype wel of niet hetzelfde zijn, maar we hoeven alleen de parameter te wijzigen.Bij het overschrijven van methoden moet het retourtype hetzelfde of een co-variant zijn.
Statische binding wordt gebruikt voor overbelaste methoden.Dynamische binding wordt gebruikt voor het overschrijven van methoden.
Slechte prestaties vanwege polymorfisme tijdens het compileren.Het geeft betere prestaties. De reden hierachter is dat de binding van overschreven methoden tijdens runtime plaatsvindt.
Privé- en eindmethoden kunnen overbelast raken.Privé- en definitieve methoden kunnen niet worden overschreven.
De argumentenlijst moet anders zijn bij overbelasting van de methode.De argumentenlijst moet hetzelfde zijn bij het overschrijven van de methode.

Methode Overbelasting in Java

Methode Overbelasting is een Compileer tijdpolymorfisme . Bij overbelasting van methoden deelt meer dan één methode dezelfde methodenaam met een andere handtekening in de klasse. Bij overbelasting van methoden kan het retourtype wel of niet hetzelfde zijn, maar we moeten de parameter wijzigen omdat we in Java geen overbelasting van de methode kunnen bereiken door alleen het retourtype van de methode te wijzigen.

Voorbeeld van methode-overbelasting:



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));  } }>

Uitvoer
add() with 2 parameters 10 add() with 3 parameters 17>

Methode overschrijven in Java

Methode overschrijven is een Runtime-polymorfisme . Bij het overschrijven van methoden biedt de afgeleide klasse de specifieke implementatie van de methode die al wordt geboden door de basisklasse of bovenliggende klasse. Bij het overschrijven van methoden moet het retourneringstype hetzelfde zijn of een co-variant zijn (het retourneringstype kan in dezelfde richting variëren als de afgeleide klasse).

Voorbeeld van methodeoverschrijving:

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();   } }>

Uitvoer
eat() method of derived class Dog is eating. eat() method of base class eating. eat() method of derived class Dog is eating.>

Uitleg van het bovenstaande programma:



Hier kunnen we zien dat een methode eat() is overschreven in de afgeleide klassenaam Hond die al wordt geleverd door de naam van de basisklasse Dier . Wanneer we de instantie van de klasse Dog maken en de methode eat() aanroepen, zien we dat alleen de afgeleide methode eat() van de klasse wordt uitgevoerd in plaats van de methode van de basisklasse eat(), en wanneer we de instantie van de klasse Animal maken en de eat( aanroepen ) zien we dat alleen de methode eat() van de basisklasse wordt uitgevoerd in plaats van de methode eat() van de afgeleide klasse.