Відмінності між перевантаженням методу та перевизначенням методу в Java такі:
Перевантаження методу | Перевизначення методу |
|---|---|
| Перевантаження методів є поліморфізмом під час компіляції. | Перевизначення методу є поліморфізмом під час виконання. |
| Перевантаження методів допомагає підвищити читабельність програми. | Перевизначення методу використовується для надання конкретної реалізації методу, яка вже надається його батьківським класом або суперкласом. |
| Це відбувається всередині класу. | Виконується у двох класах із зв'язками успадкування. |
| Перевантаження методів може вимагати або не вимагати успадкування. | Перевизначення методу завжди вимагає успадкування. |
| При перевантаженні методів методи повинні мати однакові назви та різні підписи. | Під час перевизначення методів методи повинні мати однакові назви та однаковий підпис. |
| При перевантаженні методу тип повернення може бути однаковим або не бути однаковим, але нам потрібно лише змінити параметр. | У перевизначенні методу тип повернення має бути таким самим або співваріантним. |
| Статичне зв’язування використовується для перевантажених методів. | Динамічне зв'язування використовується для перевизначення методів. |
| Низька продуктивність через поліморфізм часу компіляції. | Це забезпечує кращу продуктивність. Причина цього полягає в тому, що зв’язування перевизначених методів виконується під час виконання. |
| Приватні та остаточні методи можуть бути перевантажені. | Приватні та остаточні методи не можна перевизначати. |
| Під час перевантаження методу список аргументів має відрізнятися. | Список аргументів має бути однаковим для перевизначення методу. |
Перевантаження методів у Java
Перевантаження методу це Поліморфізм часу компіляції . При перевантаженні методів більше ніж один метод має однакове ім’я методу з різною сигнатурою в класі. При перевантаженні методу тип повернення може бути однаковим або не бути однаковим, але ми повинні змінити параметр, оскільки в java ми не можемо досягти перевантаження методу, змінивши лише тип повернення методу.
Приклад перевантаження методу:
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)); } }> Вихід
add() with 2 parameters 10 add() with 3 parameters 17>
Перевизначення методу в Java
Перевизначення методу це Поліморфізм часу виконання . У перевизначенні методу похідний клас забезпечує конкретну реалізацію методу, яка вже надається базовим або батьківським класом. У перевизначенні методу тип повернення має бути таким самим або співваріантним (тип повернення може змінюватися в тому ж напрямку, що й похідний клас).
Приклад перевизначення методу:
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(); } }> Вихід
eat() method of derived class Dog is eating. eat() method of base class eating. eat() method of derived class Dog is eating.>
Пояснення вищевказаної програми:
Тут ми бачимо, що метод eat() перевизначив назву похідного класу Пес який уже надається назвою базового класу Тварина . Коли ми створюємо екземпляр класу Dog і викликаємо метод eat(), ми бачимо, що замість методу базового класу eat() виконується лише метод похідного класу eat(), а коли ми створюємо екземпляр класу Animal і викликаємо eat(). ), ми бачимо, що виконується лише метод базового класу eat() замість методу похідного класу eat().