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
public void print();
public void print2();
To jest dozwolone. Te dwie metody mają unikalne nazwy.
public void print();
public void print(int n);
A także to. Obie metody mają unikalne nazwy (sygnatury).
public void print(int n, int n2);
public void print(int n);
Metody są nadal unikalne
public int print(int a);
public void print(int n);
Ale to jest niedozwolone . Metody nie są unikalne . Mimo że zwracają różne typy.
public int print(int a, long b);
public long print(long b, int a);
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.