logo

Różnica między przeciążaniem metod a zastępowaniem metod w Javie

Różnice między przeciążaniem metod a zastępowaniem metod w Javie są następujące:

Przeciążenie metody



Zastępowanie metody

Przeciążanie metod jest polimorfizmem występującym w czasie kompilacji.Nadpisywanie metod jest polimorfizmem wykonywanym w czasie wykonywania.
Przeciążanie metod pomaga zwiększyć czytelność programu.Nadpisywanie metod służy do zapewnienia konkretnej implementacji metody, która jest już zapewniona przez jej klasę nadrzędną lub nadklasę.
Dzieje się to w ramach zajęć.Jest ona wykonywana w dwóch klasach z relacjami dziedziczenia.
Przeciążanie metod może, ale nie musi, wymagać dziedziczenia.Przesłonięcie metody zawsze wymaga dziedziczenia.
W przypadku przeciążania metod metody muszą mieć tę samą nazwę i różne podpisy.W przypadku przesłaniania metod metody muszą mieć tę samą nazwę i ten sam podpis.
W przypadku przeciążenia metody typ zwracany może być taki sam lub nie, ale wystarczy zmienić parametr.W przypadku przesłaniania metody typ zwracany musi być taki sam lub współwariantowy.
W przypadku metod przeciążonych używane jest wiązanie statyczne.Do przesłaniania metod używane jest wiązanie dynamiczne.
Niska wydajność z powodu polimorfizmu czasu kompilacji.Daje lepszą wydajność. Dzieje się tak dlatego, że wiązanie przesłoniętych metod odbywa się w czasie wykonywania.
Metody prywatne i końcowe mogą być przeciążone.Nie można zastąpić metod private i final.
Lista argumentów powinna być inna podczas przeciążania metody.Lista argumentów powinna być taka sama w przypadku przesłaniania metody.

Przeciążanie metod w Javie

Przeciążenie metody jest Polimorfizm czasu kompilacji . W przypadku przeciążania metod więcej niż jedna metoda ma tę samą nazwę metody z innym podpisem w klasie. W przypadku przeciążania metod typ zwracany może być taki sam lub nie, ale musimy zmienić parametr, ponieważ w Javie nie możemy osiągnąć przeciążenia metody, zmieniając jedynie typ zwracany przez metodę.

Przykład przeciążenia metody:



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

Wyjście
add() with 2 parameters 10 add() with 3 parameters 17>

Przesłonięcie metody w Javie

Zastępowanie metody jest Polimorfizm czasu wykonania . W przypadku przesłaniania metody klasa pochodna zapewnia specyficzną implementację metody, która jest już zapewniona przez klasę bazową lub klasę nadrzędną. W przypadku przesłaniania metody typ zwracany musi być taki sam lub współwariantowy (typ zwracany może różnić się w tym samym kierunku co klasa pochodna).

Przykład przesłaniania metody:

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

Wyjście
eat() method of derived class Dog is eating. eat() method of base class eating. eat() method of derived class Dog is eating.>

Wyjaśnienie powyższego Programu:



Tutaj widzimy, że metoda eat() została nadpisana w nazwie klasy pochodnej Pies która jest już zapewniona przez nazwę klasy bazowej Zwierzę . Kiedy tworzymy instancję klasy Dog i wywołujemy metodę eat(), widzimy, że zamiast metody eat() klasy bazowej uruchamiana jest tylko metoda eat() klasy pochodnej, a gdy tworzymy instancję klasy Animal i wywołujemy metodę eat() ), widzimy, że uruchamiana jest tylko metoda eat() klasy bazowej, a nie metoda eat() klasy pochodnej.