Rozdíly mezi přetížením metody a přepsáním metody v Javě jsou následující:
Přetížení metody | Přepsání metody |
|---|---|
| Přetížení metody je polymorfismus v době kompilace. | Přepsání metody je polymorfismus za běhu. |
| Přetížení metod pomáhá zvýšit čitelnost programu. | Přepsání metody se používá k udělení specifické implementace metody, kterou již poskytuje její nadřazená třída nebo nadtřída. |
| Vyskytuje se v rámci třídy. | Provádí se ve dvou třídách s dědičnými vztahy. |
| Přetížení metody může nebo nemusí vyžadovat dědičnost. | Přepsání metody vždy vyžaduje dědičnost. |
| Při přetěžování metod musí mít metody stejný název a různé signatury. | Při přepisování metody musí mít metody stejný název a stejný podpis. |
| Při přetížení metody může nebo nemůže být návratový typ stejný, ale musíme změnit parametr. | Při přepisování metody musí být návratový typ stejný nebo kovariantní. |
| Statická vazba se používá pro přetížené metody. | Dynamická vazba se používá pro přepisovací metody. |
| Špatný výkon kvůli polymorfismu času kompilace. | Poskytuje lepší výkon. Důvodem je to, že vazba přepsaných metod se provádí za běhu. |
| Soukromé a konečné metody mohou být přetíženy. | Soukromé a konečné metody nelze přepsat. |
| Seznam argumentů by se měl při přetěžování metod lišit. | Seznam argumentů by měl být stejný v přepisování metody. |
Metoda přetížení v Javě
Přetížení metody je Polymorfismus času kompilace . Při přetížení metod více než jedna metoda sdílí stejný název metody s jiným podpisem ve třídě. Při přetížení metody může nebo nemůže být návratový typ stejný, ale musíme změnit parametr, protože v jazyce Java nemůžeme dosáhnout přetížení metody změnou pouze návratového typu metody.
Příklad přetížení metody:
Jáva
// 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)); } }> Výstup
add() with 2 parameters 10 add() with 3 parameters 17>
Přepis metody v Javě
Přepsání metody je Polymorfismus doby běhu . Při přepisování metody poskytuje odvozená třída specifickou implementaci metody, která je již poskytována základní třídou nebo nadřazenou třídou. Při přepisování metody musí být návratový typ stejný nebo kovariantní (typ návratu se může lišit ve stejném směru jako odvozená třída).
Příklad přepsání metody:
Jáva // 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(); } }> Výstup
eat() method of derived class Dog is eating. eat() method of base class eating. eat() method of derived class Dog is eating.>
Vysvětlení výše uvedeného programu:
Zde můžeme vidět, že metoda eat() byla přepsána v odvozeném názvu třídy Pes který je již poskytován názvem základní třídy Zvíře . Když vytvoříme instanci třídy Dog a zavoláme metodu eat(), vidíme, že místo metody základní třídy eat() běží pouze metoda odvozené třídy eat() a Když vytvoříme instanci třídy Animal a zavoláme eat( ) vidíme, že místo metody odvozené třídy eat() běží pouze metoda základní třídy eat().