Forskellene mellem metodeoverbelastning og metodetilsidesættelse i Java er som følger:
Metode Overbelastning | Metode tilsidesættelse |
|---|---|
| Metodeoverbelastning er en kompileringstidspolymorfi. | Metodetilsidesættelse er en run-time polymorfi. |
| Metodeoverbelastning er med til at øge programmets læsbarhed. | Metodetilsidesættelse bruges til at give den specifikke implementering af metoden, som allerede er leveret af dens overordnede klasse eller superklasse. |
| Det sker i klassen. | Det udføres i to klasser med arveforhold. |
| Metodeoverbelastning kræver muligvis nedarvning. | Metodetilsidesættelse kræver altid arv. |
| Ved metodeoverbelastning skal metoder have samme navn og forskellige signaturer. | Ved metodetilsidesættelse skal metoder have samme navn og samme signatur. |
| Ved metodeoverbelastning kan returtypen være den samme eller ikke, men vi skal bare ændre parameteren. | Ved metodetilsidesættelse skal returtypen være den samme eller samvariant. |
| Statisk binding bruges til overbelastede metoder. | Dynamisk binding bruges til at overstyre metoder. |
| Dårlig ydeevne på grund af kompileringstidspolymorfi. | Det giver bedre ydeevne. Årsagen bag dette er, at bindingen af tilsidesatte metoder udføres under kørsel. |
| Private og endelige metoder kan blive overbelastet. | Private og endelige metoder kan ikke tilsidesættes. |
| Argumentlisten bør være anderledes, mens metodeoverbelastningen udføres. | Argumentlisten skal være den samme i metodetilsidesættelse. |
Metodeoverbelastning i Java
Metode Overbelastning er en Kompiler tidspolymorfi . Ved metodeoverbelastning deler mere end én metode det samme metodenavn med en anden signatur i klassen. Ved metodeoverbelastning kan eller kan returtypen være den samme, men vi er nødt til at ændre parameteren, fordi vi i java ikke kan opnå metodeoverbelastning ved kun at ændre metodens returtype.
Eksempel på metodeoverbelastning:
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>
Metodetilsidesættelse i Java
Metode tilsidesættelse er en Køretidspolymorfi . Ved metodetilsidesættelse giver den afledte klasse den specifikke implementering af metoden, som allerede er leveret af basisklassen eller overordnet klasse. Ved metodetilsidesættelse skal returtypen være den samme eller samvariant (afkasttypen kan variere i samme retning som den afledte klasse).
Eksempel på metodetilsidesættelse:
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.>
Forklaring af ovenstående program:
Her kan vi se, at en metode eat() har tilsidesat i det afledte klassenavn Hund som allerede er leveret af basisklassenavnet Dyr . Når vi opretter forekomsten af klassen Dog og kalder eat()-metoden, ser vi, at kun afledt klasse eat()-metoden kører i stedet for basisklassemetoden eat(), og når vi opretter forekomsten af klassen Animal og kalder eat( )-metoden, ser vi, at kun basisklassen eat()-metoden kører i stedet for den afledte klassemetode eat().