Zastępowanie kontra przeciążanie
Metoda Overriding i metoda Overloading to dwie koncepcje/techniki/funkcje występujące w niektórych językach programowania. Obie koncepcje umożliwiają programiście zapewnienie różnych implementacji dla metod o tej samej nazwie. Przesłanianie metod umożliwia programiście zapewnienie alternatywnej implementacji w podklasie do metody już zdefiniowanej w jej superklasie. Przeciążanie metod umożliwia programiście dostarczenie różnych implementacji do wielu metod o tej samej nazwie (w tej samej klasie).
Co to jest nadpisywanie?
Jak wspomniano powyżej, klasa może rozszerzać superklasę lub klasę nadrzędną w obiektowych językach programowania. 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 starszych klas nadrzędnych). Więc kiedy to ostatnie się wydarzy, nazywa się to nadpisywaniem metody. Innymi słowy, jeśli klasa potomna dostarcza implementację do 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 przesłonięta (zastąpiona) przez implementację klasy potomnej. Tak więc, jeśli w klasie istnieje nadpisana metoda, system wykonawczy będzie musiał zdecydować, która implementacja metody zostanie użyta. Ten problem można rozwiązać, sprawdzając dokładny typ obiektu, który jest używany do jego wywołania. Jeśli do wywołania nadpisanej metody używany jest obiekt klasy nadrzędnej, używana jest implementacja w klasie nadrzędnej. Podobnie, jeśli jest to używany obiekt klasy potomnej, wówczas 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 w celu utworzenia 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 w nowoczesnych językach programowania, takich jak Java, C, C++ i VB. NET. Metodę można przeciążyć, tworząc inną metodę o tej samej nazwie, ale z inną sygnaturą metody lub innym typem zwracanym (lub obydwoma). Na przykład, jeśli masz method1(type1 t1) i method1(type2 t2) w tej samej klasie, są one przeciążone. Wtedy system będzie musiał zdecydować, który z nich ma zostać wykonany po wywołaniu. To rozróżnienie jest dokonywane na podstawie typu parametrów przekazanych do metody. Jeśli argument jest typu 1, to wywoływana jest pierwsza implementacja, a jeśli jest typu 2, wywoływana jest druga implementacja.
Jaka jest różnica między nadpisywaniem a przeciążaniem?
Chociaż nadpisywanie metody i przeciążanie metody są używane w celu zapewnienia metody z różnymi implementacjami, istnieją kluczowe różnice między tymi dwoma koncepcjami/technikami. Po pierwsze, podmioty przeciążania metod zawsze pozostają w różnych klasach, a podmioty przeciążania metod pozostają w tej samej klasie. Oznacza to, że przesłonięcie jest możliwe tylko w językach programowania zorientowanych obiektowo, które umożliwiają dziedziczenie, podczas gdy przeciążanie może być również dostępne w języku niezorientowanym obiektowo. Innymi słowy, nadpisujesz metodę w super klasie, ale przeciążasz metodę we własnej klasie.
Kolejną różnicą jest to, że zastąpione 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 przesłonięte metody, dokładny typ obiektu, który jest używany do wywołania używanego identyfikatora metod, natomiast w celu rozróżnienia dwóch przeciążonych metod używane są typy parametrów. Inną kluczową różnicą jest to, że przeciążanie jest rozwiązywane w czasie kompilacji, podczas gdy przesłanianie jest rozwiązywane w czasie wykonywania.