logo

Diferența dintre supraîncărcarea metodei și suprascrierea metodei în Java

Diferențele dintre supraîncărcarea metodei și suprascrierea metodei în Java sunt următoarele:

Supraîncărcarea metodei



Anularea metodei

Supraîncărcarea metodei este un polimorfism în timp de compilare.Suprascrierea metodei este un polimorfism de rulare.
Supraîncărcarea metodei ajută la creșterea lizibilității programului.Suprascrierea metodei este folosită pentru a acorda implementarea specifică a metodei care este deja furnizată de clasa sau superclasa părinte.
Se întâmplă în cadrul clasei.Se realizează în două clase cu relații de moștenire.
Supraîncărcarea metodei poate necesita sau nu moștenire.Anularea metodei are întotdeauna nevoie de moștenire.
În supraîncărcarea metodelor, metodele trebuie să aibă același nume și semnături diferite.În cazul suprascrierii metodelor, metodele trebuie să aibă același nume și aceeași semnătură.
În supraîncărcarea metodei, tipul de returnare poate sau nu poate fi același, dar trebuie doar să schimbăm parametrul.În anularea metodei, tipul de returnare trebuie să fie același sau covariant.
Legarea statică este utilizată pentru metodele supraîncărcate.Legarea dinamică este utilizată pentru metode de suprascriere.
Performanță slabă din cauza polimorfismului timpului de compilare.Oferă performanțe mai bune. Motivul din spatele acestui lucru este că legarea metodelor suprascrise se face în timpul execuției.
Metodele private și finale pot fi supraîncărcate.Metodele private și finale nu pot fi anulate.
Lista de argumente ar trebui să fie diferită în timpul supraîncărcării metodei.Lista de argumente ar trebui să fie aceeași în suprascrierea metodei.

Supraîncărcarea metodei în Java

Supraîncărcarea metodei este o Polimorfism în timp de compilare . În supraîncărcarea metodei, mai multe metode partajează același nume de metodă cu o semnătură diferită în clasă. În supraîncărcarea metodei, tipul de returnare poate sau nu poate fi același, dar trebuie să schimbăm parametrul deoarece, în java, nu putem realiza supraîncărcarea metodei prin schimbarea doar a tipului de returnare al metodei.

Exemplu de supraîncărcare a metodei:



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));  } }>

Ieșire
add() with 2 parameters 10 add() with 3 parameters 17>

Suprascrierea metodei în Java

Anularea metodei este o Polimorfismul timpului de rulare . În suprascrierea metodei, clasa derivată oferă implementarea specifică a metodei care este deja furnizată de clasa de bază sau clasa părinte. În anularea metodei, tipul de returnare trebuie să fie același sau covariant (tipul de returnare poate varia în aceeași direcție cu clasa derivată).

Exemplu de înlocuire a metodei:

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();   } }>

Ieșire
eat() method of derived class Dog is eating. eat() method of base class eating. eat() method of derived class Dog is eating.>

Explicația programului de mai sus:



Aici, putem vedea că o metodă eat() a fost suprascrisă în numele clasei derivate Câine care este deja furnizat de numele clasei de bază Animal . Când creăm instanța clasei Dog și apelăm metoda eat(), vedem că numai metoda derivată eat() din clasă rulează în loc de metoda clasei de bază eat(), iar când creăm instanța clasei Animal și apelăm eat(). ), vedem că numai metoda clasei de bază eat() rulează în loc de metoda clasei derivate eat().