logo

Skillnaden mellan metodöverbelastning och metodöverskrivning i Java

Skillnaderna mellan metodöverbelastning och metodöverskrivning i Java är följande:

Metod Överbelastning



Metod Åsidosättande

Metodöverbelastning är en kompileringstidspolymorfism.Metodöverstyrning är en körtidspolymorfism.
Metodöverbelastning hjälper till att öka programmets läsbarhet.Metodöverstyrning används för att ge den specifika implementeringen av metoden som redan tillhandahålls av dess överordnade klass eller superklass.
Det sker inom klassen.Det utförs i två klasser med arvsförhållanden.
Metodöverbelastning kan kräva arv eller inte.Metodöverstyrning behöver alltid arv.
Vid metodöverbelastning måste metoder ha samma namn och olika signaturer.Vid metodöverstyrning måste metoder ha samma namn och samma signatur.
Vid metodöverbelastning kan returtypen vara densamma eller inte, men vi måste bara ändra parametern.Vid metodöverstyrning måste returtypen vara densamma eller samvariant.
Statisk bindning används för överbelastade metoder.Dynamisk bindning används för överordnade metoder.
Dålig prestanda på grund av kompileringstidspolymorfism.Det ger bättre prestanda. Anledningen till detta är att bindningen av åsidosatta metoder görs under körning.
Privata och slutliga metoder kan överbelastas.Privata och slutliga metoder kan inte åsidosättas.
Argumentlistan bör vara annorlunda när man gör metodöverbelastning.Argumentlistan bör vara densamma i metodöverstyrning.

Metodöverbelastning i Java

Metod Överbelastning är en Kompilera tidspolymorfism . Vid metodöverbelastning delar mer än en metod samma metodnamn med en annan signatur i klassen. I metodöverbelastning kan eller kan returtypen vara densamma, men vi måste ändra parametern eftersom vi i java inte kan uppnå metodöverbelastning genom att endast ändra metodens returtyp.

Exempel på metodöverbelastning:



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

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

Metodöverstyrning i Java

Metod Åsidosättande är en Körtidspolymorfism . Vid metodöverstyrning tillhandahåller den härledda klassen den specifika implementeringen av metoden som redan tillhandahålls av basklassen eller förälderklassen. Vid metodöverstyrning måste returtypen vara densamma eller samvariant (returtypen kan variera i samma riktning som den härledda klassen).

Exempel på metodöverstyrning:

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

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

Förklaring av ovanstående program:



Här kan vi se att en metod eat() har åsidosatt i det härledda klassnamnet Hund som redan tillhandahålls av basklassens namn Djur . När vi skapar instansen av klassen Dog och anropar metoden eat() ser vi att endast härledd klass eat()-metoden körs istället för basklassmetoden eat(), och när vi skapar instansen av klassen Animal och anropar eat( )-metoden, ser vi att endast basklassmetoden eat() körs istället för den härledda klassmetoden eat().