Przesłonięcie a przeciążenie
Metoda Overriding i metoda 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. Przesłonięcie metody pozwala programiście dostarczyć alternatywną implementację w ramach podklasy do metody już zdefiniowanej w jej nadklasie. Przeciążenie metod pozwala programiście udostępnić różne implementacje wielu metodom 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 obiektowych językach programowania. Klasa podrzędna może mieć własne metody lub opcjonalnie mieć własne implementacje metod już zdefiniowanych w klasie nadrzędnej (lub jednej z jej klas nadrzędnych). Kiedy więc to się zdarza, nazywa się to przesłonięciem metody. Innymi słowy, jeśli klasa potomna zapewnia implementację metody o tym samym typie podpisu i zwrotu, co metoda zdefiniowana już w jednej z jej klas nadrzędnych, mówi się, że metoda ta jest zastąpiona (zastąpiona) przez implementację klasy potomnej . Jeśli więc w klasie występuje przesłonięta metoda, system wykonawczy będzie musiał zdecydować, która implementacja metody zostanie zastosowana. Ten problem rozwiązano, patrząc na dokładny typ obiektu użytego do jego wywołania. Jeśli obiekt klasy nadrzędnej zostanie użyty do wywołania metody przesłoniętej, zostanie użyta implementacja w klasie nadrzędnej. Podobnie, jeśli używany jest obiekt klasy potomnej, wówczas używana jest implementacja klasy potomnej. Nowoczesne języki programowania, takie jak Java, Eifell, C ++ i Python, pozwalają na zastępowanie metod.
Co to jest przeciążanie?
Przeciążanie metod to funkcja udostępniana przez niektóre języki programowania do tworzenia więcej niż jednej metody o tej samej nazwie, ale z różnymi typami danych wejściowych i wyjściowych. W nowoczesnych językach programowania, takich jak Java, C #, C ++ i VB.NET, ta funkcja jest dostępna. Możesz przeładować metodę, tworząc inną metodę o tej samej nazwie, ale z inną sygnaturą metody lub innym rodzajem zwrotu (lub obydwoma). Na przykład, jeśli masz metodę 1 (typ 1 t1) i metodę 1 (typ 2 t2) w tej samej klasie, wówczas są one przeciążone. Następnie system będzie musiał zdecydować, który ma zostać wykonany, gdy zostanie wywołany. To rozróżnienie dokonuje się, patrząc na typ parametru (parametrów) przekazanych do metody. Jeśli argument jest typu 1, wywoływana jest pierwsza implementacja, a jeśli jest typu 2, to wywoływana jest druga implementacja.
Jaka jest różnica między nadpisywaniem a przeciążaniem?
Chociaż nadpisywanie metod i przeciążanie metod są stosowane w celu zapewnienia metody o różnych implementacjach, istnieją kluczowe różnice między tymi dwiema koncepcjami / technikami. Po pierwsze, podmioty zastępujące metody zawsze pozostają w różnych klasach, podczas gdy podmioty przeciążające metody pozostają w tej samej klasie. Oznacza to, że przesłonięcie jest możliwe tylko w obiektowych językach programowania, które umożliwiają dziedziczenie, natomiast przeciążenie może być również dostępne w języku nie zorientowanym obiektowo. Innymi słowy, zastępujesz metodę z superklasy, ale przeciążasz metodę z własnej klasy.
Inna różnica polega na tym, że zastąpione metody mają tę samą nazwę metody, podpis metody i typ zwracany, ale przeciążone metody muszą różnić się pod względem typu podpisu lub zwrotu (nazwa powinna być taka sama). W celu rozróżnienia między dwiema przesłoniętymi metodami używany jest dokładny typ obiektu, który jest używany do wywołania użytych metod, natomiast w celu odróżnienia dwóch przeciążonych metod stosowane są typy parametrów. Inną kluczową różnicą jest to, że przeciążenie jest rozwiązywane w czasie kompilacji, podczas gdy nadpisywanie jest rozwiązywane w czasie wykonywania.