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().