logo

Різниця між перевантаженням методу та перевизначенням методу в Java

Відмінності між перевантаженням методу та перевизначенням методу в 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().