Przeciążenie metody
Naszym nowym i interesującym tematem na dziś jest przeciążanie metod . Uważaj — nie należy mylić przeciążania metod z nadpisywaniem metod.
W przeciwieństwie do nadpisywania, przeciążanie jest bardzo prostą operacją. W rzeczywistości nie jest to operacja na metodach, chociaż czasami określa się ją okropnym terminem polimorfizm parametryczny .
Problem polega na tym, że wszystkie metody w klasie muszą mieć unikalne nazwy. Cóż, nie jest to do końca dokładne. Cóż, dokładniej, to wcale nie jest dokładne. Nazwa metody nie musi być unikalna. To, co musi być unikalne, to połączenie nazwy metody i typów parametrów metody. To połączenie jest znane jako sygnatura metody
Przykłady:
Kod | Opis |
---|---|
|
To jest dozwolone. Te dwie metody mają unikalne nazwy. |
|
A także to. Obie metody mają unikalne nazwy (sygnatury). |
|
Metody są nadal unikalne |
|
Ale to jest niedozwolone . Metody nie są unikalne . Mimo że zwracają różne typy. |
|
Ale możesz to zrobić . Parametry metody są unikalne |
Sygnatura zawiera nazwę metody i typy parametrów . Nie obejmuje zwracanego typu metody i nazw parametrów . Klasa nie może mieć dwóch metod z tymi samymi sygnaturami — kompilator nie będzie wiedział, którą z nich wywołać.
Nazwy parametrów nie mają znaczenia , ponieważ gubią się podczas kompilacji. Po skompilowaniu metody znana jest tylko jej nazwa i typy parametrów. Zwracany typ nie jest tracony, ale wynik metody nie musi być do niczego przypisany, więc również nie jest uwzględniany w sygnaturze.
Zgodnie z zasadami OOP , polimorfizm ukrywa różne implementacje za jednym interfejsem. Kiedy na przykład wywołujemy System.out.println()
metodę, wywoływane są różne metody w zależności od przekazywanych argumentów. To polimorfizm w działaniu.
Dlatego różne metody o identycznych nazwach zawarte w tej samej klasie są uważane za słabą formę polimorfizmu.
GO TO FULL VERSION