Różnica Między Zastępowaniem A Przeciążaniem

Różnica Między Zastępowaniem A Przeciążaniem
Różnica Między Zastępowaniem A Przeciążaniem

Wideo: Różnica Między Zastępowaniem A Przeciążaniem

Wideo: Różnica Między Zastępowaniem A Przeciążaniem
Wideo: Niezstąpione jądro - czym jest i jak postępować. 2024, Kwiecień
Anonim

Zastępowanie a przeciążanie

Metoda Overriding i Method Overloading to dwie koncepcje / techniki / funkcje występujące w niektórych językach programowania. Obie koncepcje pozwalają programiście zapewnić różne implementacje metod o tej samej nazwie. Zastępowanie metod umożliwia programiście zapewnienie alternatywnej implementacji w ramach podklasy metody już zdefiniowanej w jej superklasie. Przeciążanie metod umożliwia programiście dostarczanie różnych implementacji wielu metod o tej samej nazwie (w ramach tej samej klasy).

Co jest nadrzędne?

Jak wspomniano powyżej, klasa może rozszerzać superklasę lub klasę nadrzędną w językach programowania obiektowego. Klasa potomna może mieć własne metody lub opcjonalnie może mieć własne implementacje metod już zdefiniowanych w jej klasie nadrzędnej (lub jednej z jej klas nadrzędnych). Więc kiedy ma miejsce to drugie, nazywa się to przesłanianiem metody. Innymi słowy, jeśli klasa potomna zapewnia implementację metody z tym samym podpisem i typem zwracanym, co metoda już zdefiniowana w jednej z jej klas nadrzędnych, mówi się, że metoda ta jest nadpisywana (zastępowana) przez implementację klasy potomnej. Tak więc, jeśli w klasie istnieje nadpisana metoda, system wykonawczy będzie musiał zdecydować, która implementacja metody jest używana. Ten problem można rozwiązać, sprawdzając dokładny typ obiektu, który jest używany do jego wywołania. Jeśli obiekt klasy nadrzędnej jest używany do wywołania przesłoniętej metody, używana jest implementacja w klasie nadrzędnej. Podobnie, jeśli jest to obiekt klasy potomnej, która jest używana, używana jest implementacja klasy potomnej. Nowoczesne języki programowania, takie jak Java, Eifell, C ++ i Python, umożliwiają nadpisywanie metod.

Co to jest przeciążenie?

Przeciążanie metod to funkcja udostępniana przez niektóre języki programowania, która umożliwia tworzenie więcej niż jednej metody o tej samej nazwie, ale z różnymi typami danych wejściowych i wyjściowych. Ta funkcja jest dostępna we współczesnych językach programowania, takich jak Java, C #, C ++ i VB. NET. Możesz przeciążyć metodę, tworząc inną metodę o tej samej nazwie, ale z inną sygnaturą metody lub innym typem zwracania (lub jednym i drugim). Na przykład, jeśli masz method1 (type1 t1) i method1 (type2 t2) wewnątrz tej samej klasy, to są one przeciążone. Następnie system będzie musiał zdecydować, który z nich ma zostać wykonany po wywołaniu. To rozróżnienie jest dokonywane poprzez przyjrzenie się typowi parametru (ów) przekazanego do metody. Jeśli argument jest typu 1, to wywoływana jest pierwsza implementacja, a jeśli jest typu 2, to wywoływana jest druga implementacja.

Jaka jest różnica między zastępowaniem a przeciążaniem?

Chociaż przesłanianie metod i przeciążanie metod są używane w celu zapewnienia metody z różnymi implementacjami, istnieją kluczowe różnice między tymi dwoma koncepcjami / technikami. Przede wszystkim przedmioty nadpisywania metod pozostają zawsze w różnych klasach, podczas gdy przedmioty przeciążania metod pozostają w tej samej klasie. Oznacza to, że nadpisywanie jest możliwe tylko w zorientowanych obiektowo językach programowania, które pozwalają na dziedziczenie, podczas gdy przeciążanie może być również dostępne w języku niezorientowanym obiektowo. Innymi słowy, nadpisujesz metodę w superklasie, ale przeciążasz metodę w swojej własnej klasie.

Inną różnicą jest to, że zastępowane metody mają tę samą nazwę metody, podpis metody i typ zwracany, ale metody przeciążone muszą różnić się podpisem lub typem zwracanym (nazwa powinna być taka sama). Aby rozróżnić dwie nadpisane metody, dokładny typ obiektu, który jest używany do wywoływania użytych metod, natomiast w celu rozróżnienia między dwiema przeciążonymi metodami używane są typy parametrów. Inną kluczową różnicą jest to, że przeciążenie jest rozwiązywane w czasie kompilacji, podczas gdy zastępowanie jest rozwiązywane w czasie wykonywania.

Zalecane: