Różnica między przeciążeniem a zastąpieniem

Zanim zagłębimy się głęboko w różnice między przeciążeniem a przesłonięciem, musimy zrozumieć, czym one właściwie są i scenariuszami, w których są szczególnie używane? Początkujący w Javie często mylą się między nimi, ale są całkowicie różni się od siebie i są wykorzystywani w swoich konkretnych scenariuszach. Przeciążanie metod ma miejsce, gdy mamy wiele metod o tej samej nazwie, ale różnych podpisach. Podpisy obejmują liczbę parametrów metody, typ danych parametrów. Zwracana metoda nie jest uwzględniona w podpisie. Odbywa się to w celu zapewnienia funkcjonalności ponownego użycia tej samej nazwy metody i zwiększenia czytelności programów. Zastępowanie metod ma miejsce w przypadku dziedziczenia, w którym klasa pochodna dziedziczy właściwości z klasy podstawowej. Polega ona na zdefiniowaniu tej samej metody klasy bazowej w klasie pochodnej z tym samym parametrem i typem zwrotu w celu zdefiniowania dowolnej konkretnej funkcjonalności / implementacji tej metody w klasie pochodnej.

Rozważ scenariusz, w którym programista musi znaleźć obszar figury geometrycznej. Obszar każdej figury różni się od siebie. Na przykład do znalezienia pola kwadratu wymagany jest tylko jeden parametr „bok”, w przypadku prostokąta wymagane są dwa parametry „długość i szerokość”, natomiast dla okręgu wymagany jest promień, który może być dziesiętny. Aby rozwiązać ten cel, następuje przeciążenie metody, w której obszar metody ma różne parametry i typ danych dla obszaru o różnych liczbach. Pomyśl o sytuacji w systemie bankowym, chociaż wiele metod i procedur dla wszystkich pracowników jest takich samych, z wyjątkiem niektórych podobnych stóp procentowych dla zwykłych i starszych osób. W tym przypadku stosuje się metodę zastępowania metody, mającą różne implementacje metody stóp procentowych zarówno w klasie normalnej, jak i seniorów, dziedziczącą klasę podstawową „stopy bankowe”.

Bezpośrednie porównanie między przeciążeniem a zastąpieniem (infografiki)

Poniżej znajduje się porównanie Top 7 między przeciążeniem a zastąpieniem :

Kluczowe różnice między przeciążeniem a zastąpieniem

Omówmy niektóre z głównych różnic między przeciążeniem a zastąpieniem:

  1. W przypadku przeciążenia metody metody mogą mieć takie same lub różne specyfikatory / modyfikatory dostępu w nazwie metody, podczas gdy w metodzie zastępowania metody przypadek podstawowy (metoda przesłonięta) musi mieć specyfikator ograniczonego dostępu niż metoda klasy nadrzędnej. Na przykład, jeśli metoda klasy bazowej jest chroniona, wówczas prywatna metoda potomna nie jest dozwolona.
  2. Porównując pod względem wydajności, przeciążenie ma lepszą wydajność w porównaniu do przesłonięcia, ponieważ przeciążenie metody odbywa się w czasie kompilacji.
  3. Zwracany typ metody nigdy nie jest częścią metody Przeciążenie, dlatego nie ma znaczenia, czy różne przeciążone metody mają ten sam lub inny typ zwrotu, podczas gdy w metodzie Metoda zastępująca typ powrotu zarówno metod klasy nadrzędnej, jak i podstawowej musi być dokładnie taka sama .
  4. Mówiąc o wiązaniu, Przeciążanie ma wiązanie statyczne, podczas gdy Nadpisywanie ma wiązanie dynamiczne.
  5. Wyjątek zgłaszany przez metodę nie ma znaczenia w metodzie przeciążonej, jeśli jedna metoda zgłasza wyjątek, inne przeciążone metody mogą / nie mogą zgłosić tego samego lub innego wyjątku, ale w przypadku przesłonięcia metoda przesłonięcia (metoda w klasie pochodnej) nie może zgłosić wyjątku o wyższej hierarchii niż metoda przesłonięta (metoda w klasie bazowej).
  6. Wszystkie specyfikatory, takie jak prywatny, końcowy i statyczny, nie mogą być używane w zastępowaniu metod, podczas gdy wszystkie specyfikatory dostępu są dozwolone w przypadku przeciążenia metody.

Tabela porównawcza przeciążenia vs zastąpienie

Poniższa tabela podsumowuje porównania między przeciążeniem a zastąpieniem:

S.No. Przeciążenie Nadrzędny
1Przeciążanie metod ma na celu ulepszoną definicję metod w zależności od różnych sytuacji.Zastępowanie metod odbywa się w celu zapewnienia konkretnej implementacji metod zdefiniowanych w klasie nadrzędnej.
2)Przeciążenie metody odbywa się w jednej klasie, w której jedna klasa ma różne definicje metody.Zastępowanie metod odbywa się między dwiema klasami mającymi między sobą relację IS-A (dziedziczenie).
3)Metoda Przeładowanie odbywa się w czasie kompilacji i dlatego jest znana jako polimorfizm w czasie kompilacji.Metoda zastępowania jest wykonywana w czasie wykonywania i dlatego jest znana jako polimorfizm w czasie wykonywania.
4Kolejność parametrów, typ danych i liczba parametrów muszą być różne w przypadku przeciążenia metody.Kolejność parametrów, typ danych i liczba muszą być takie same w przypadku przesłonięcia metody.
5Zwracany typ metody może być taki sam lub inny w przypadku przeciążenia metody. To w ogóle nie ma znaczenia.Zwracany typ metody musi być taki sam w klasie nadrzędnej i podrzędnej w przypadku zastąpienia metody.
6Metody statyczne mogą być przeciążone, tzn. Możemy mieć przeciążone różne metody statyczne w tej samej klasie.Metody statyczne nigdy nie mogą zostać zastąpione, tj. Metoda statyczna w klasie nadrzędnej i klasie podstawowej nie ma między nimi żadnej relacji.
7Prywatne i końcowe metody mogą być przeciążone w klasie, tzn. Klasa może przeciążyć więcej niż 1 prywatną i ostateczną metodę.Prywatnych i ostatecznych metod nigdy nie można zastąpić w klasie podrzędnej.

Przykład przeciążenia metody:

class FIgures(
public int area(int side)
(
return side*side;
)
public int area(int length, int breadth) //method overloading
(
return length*breadth;
)
public static void main(String() args)
(
Figures f = new Figures ();
System.out.println(“Area of Square “+ f.area(10));
System.out.println(“Area of Rectangle “+ f.area(12, 10));
)
)

Wynik:

Powierzchnia kwadratu 100
Obszar prostokąta 120

W powyższym przykładzie metoda „area ()” jest przeciążona i ma różne parametry w obu metodach przeciążonych. Ponieważ obszar musi znaleźć zarówno kwadrat, jak i prostokąt, ale z różnymi parametrami.

Przykład zastąpienia metody:

class BankRates( // parent(base) class
void rates()
(
System.out.println(“Rates for normal citizen is 3.5%”);
)
)
class SeniorCItizen extends BankRates( //child class inheriting parent class
void rates() // method overriding
(
System.out.println(“Rates for senior citizens is 4.5%”);
)
)
class Bank(
public static void main(String() args)
(
SeniorCItizen sc = new BankRates(); sc.rates();
)
)

Wynik:

Stawki dla seniorów wynoszą 4, 5%

W powyższym przykładzie metoda „stawki ()” jest nadpisywana w klasie pochodnej „SeniorCitizen”, ponieważ chcemy także stawek metody w klasie SeniorCitizen, ale z inną implementacją.

Wniosek

Powyższe objaśnienie wyraźnie pokazuje różnicę między przeciążeniem a nadpisaniem a konkretnymi scenariuszami, w których są one stosowane. Przed programowaniem należy zrozumieć podstawowe pojęcia dotyczące języka Java, ponieważ stanowią one podstawę wielu rzeczy i pomagają w łatwym zrozumieniu bardziej zaawansowanych pojęć.

Polecane artykuły

Jest to wskazówka na temat największej różnicy między przeciążeniem a zastąpieniem. Tutaj omawiamy również Przeciążenie vs Nadpisywanie kluczowych różnic za pomocą infografiki i tabeli porównawczej. Możesz także zapoznać się z następującymi artykułami, aby dowiedzieć się więcej -

  1. Programowanie funkcjonalne a OOP
  2. Co to jest zastępowanie w JavaScript?
  3. Jak działa Przeciążanie w PHP?
  4. Omówienie przeciążenia w C #
  5. Przesłanianie w Javie
  6. Przeciążenie Pythona
  7. Przeciążanie i zastępowanie w C #