Co to jest przeciążanie metod?

Przeciążanie metod to funkcja w większości języków programowania obiektowego, w których co najmniej dwie metody mają tę samą nazwę, ale mają różne parametry. W szczególności liczba, typ danych i/lub kolejność parametrów są różne. Po skompilowaniu kodu właściwa metoda zostanie automatycznie wybrana na podstawie sposobu jej wywołania. Metody są również znane jako funkcje w niektórych językach programowania, więc przeciążanie metod jest czasami określane jako przeciążanie funkcji.

Prostym przykładem przeciążania metody byłaby metoda obliczająca pole kwadratu. Może być zdefiniowany jako getArea(Square s). Metodę tę można by przeciążyć, aby dodatkowo obliczyć pole koła przez dodanie metody getArea(Circle c).

Podstawowym wymaganiem przeciążania metod jest to, że metody mają tę samą nazwę. Ich sygnatury metod — nazwa metody, liczba parametrów i typy danych parametrów — powinny być unikatowe. W ten sposób kompilator może określić, którą metodę wykonać.

Konstruktory, metody używane do tworzenia instancji obiektów, są często przeciążone. Ma to na celu zainicjowanie obiektu z wartościami innymi niż domyślne. Na przykład obiekt pracownika z dwoma polami (nazwisko i data urodzenia lub data urodzenia) może mieć następujące przeciążone konstruktory: Employee(), Employee(name) i Employee(name, data). Pierwszy konstruktor tworzy obiekt pracownika z pustymi polami nazwy i dob. Drugi ustawia pole nazwy, ale pozostawia pole dob puste, a trzeci definiuje zarówno pola nazwy, jak i dob.

Przeciążanie metod jest najczęściej wykonywane, aby więcej niż jedna metoda pojawiała się logicznie jako pojedyncza metoda. W przykładzie getArea(), chociaż fizycznie istnieją dwie metody, wywołujący jest prezentowany za pomocą jednej, logicznej metody getArea(). W ten sposób metoda getArea() może zostać rozszerzona do pracy z innymi kształtami — trójkątami, trapezoidami itd. — jednocześnie prezentując się logicznie jako pojedyncza metoda.

Metody są również przeciążone, aby zachować zgodność z poprzednimi wersjami. Metoda wykonująca złożone obliczenia może otrzymać nowe wymaganie opcjonalnego wykonania tego samego obliczenia z niewielką zmianą. Do metody dodawany jest nowy parametr, który określi sposób wykonania obliczeń — stary lub nowy sposób.
Aby uniknąć konieczności znajdowania wszystkich przypadków, w których wywoływana jest metoda, i dodawania nowego parametru, metoda może zostać przeciążona. Nowa metoda będzie miała stary podpis i będzie wywoływana przez istniejący kod. Nie będzie zawierał żadnej logiki i po prostu wywoła zmodyfikowaną metodę i przekaże domyślnie „stary sposób” dla nowego parametru. Nowy kod wywoła zmodyfikowaną metodę i przekaże nowy parametr z odpowiednią wartością, starym lub nowym sposobem.
Przeciążanie metod jest rodzajem polimorfizmu, w którym tę samą metodę logiczną można w praktyce zastosować na wiele sposobów. Przeciążanie metod to nie to samo, co przesłanianie metod. Zastępowanie metod polega na zmianie definicji metody w klasie nadrzędnej przez klasę podrzędną. W takim przypadku obie metody będą miały ten sam podpis.