CodeGym /Kursy /Podstawy Java /Przeciążanie metod

Przeciążanie metod

Podstawy Java
Poziom 2 , Lekcja 3
Dostępny

– Cześć, Amigo! Opowiem Ci o przeciążaniu metod.

– To można je przeciążać?! O kurka!

Możesz z nimi robić naprawdę wiele rzeczy, ale o tym powiem Ci kiedy indziej.

– Umowa stoi.

– Przeciążanie jest naprawdę prostą operacją. Właściwie, nie jest to nawet operacja na metodach, mimo że czasami jest ona określana pewną przerażającą nazwą: polimorfizm parametryczny.

Musisz pamiętać o tym, że każda metoda w klasie ma swoją unikalną nazwę.

– Tak, wiem.

– To znaczy, nie do końca tak jest. Właściwie, to nie jest tak ani trochę. Metoda wcale nie musi mieć unikalnej nazwy. Unikalna musi być za to kombinacja nazwy metody i typów jej parametrów. Ta kombinacja to inaczej sygnatura metody.

Kod Komentarze
public void print();
public void print2();
To jest dozwolone. Te dwie metody mają swoje unikalne nazwy.
public void print();
public void print(int n);
To też jest dozwolone. Te dwie metody mają swoje unikalne nazwy (sygnatury).
public void print(int n, int n2);
public void print(int n);
Nazwy metod tutaj również są unikalne.
public int print(int a);
public void print(int n);
To już nie jest dozwolone. Te metody nie są unikalne, mimo że zostały przekazane różne typy.
public int print(int a, long b);
public long print(long b, int a);
To natomiast jest dozwolone. Parametry metod są unikalne.

– Już to gdzieś widziałem...

– Jasne. Kiedy wpisujesz "System.out.println", IntelliJ IDEA proponuje kilkadziesiąt różnych wersji metod print, które używają różnych parametrów. Kompilator zwyczajnie identyfikuje, a następnie wywołuje wymaganą metodę w oparciu o typy parametrów, które zostały przekazane.

– To nie takie trudne. Ale to nie jest polimorfizm.

– Wyrażając się bardziej precyzyjnie, nie jest to nadpisywanie metod.

Zwróć także uwagę, że nazwy parametrów są tu bez znaczenia. Zostaną one utracone podczas kompilowania. Kiedy metoda się już skompiluje, to znane są tylko jej nazwa i typy parametrów.

Komentarze (5)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Tomasz Sknadaj Poziom 18, Skoczów, Polska
31 maja 2020
Dlaczego te dwie metody nie są dozwolone?

public int print(int a);
public void print(int n);
Mają przecież różne sygnatury (int a; int n).
Kamil Kazana Poziom 19, Lublin, Poland
6 lipca 2020
pewnie dlatego, ze maja tylko jeden argument typu int
Uszek Poziom 41, Wodzisław Śląski, United States
17 czerwca 2022
A dodatkowo w ostatnim zdaniu w tym artykule zapisano "Zwróć także uwagę, że nazwy parametrów są tu bez znaczenia".
Mateusz Poziom 15, Poland, Poland
24 lipca 2022
W ostatnim zdaniu masz odpowiedz " Zwróć także uwagę, że nazwy parametrów są tu bez znaczenia. Zostaną one utracone podczas kompilowania. Kiedy metoda się już skompiluje, to znane są tylko jej nazwa i typy parametrów. " Mówiąc wprost komputera nie obchodzą nazwy zmiennych bo i tak ich nie przetwarza czyli programista widzi print(int a); print(int n); a komputer print(int); print(int); więc dla niego to to samo.
Przemo Poziom 17, Legnica, Poland
21 stycznia 2024
Bo mają jeden parametr w nawiasie tego samego typu. Jakby był w jednym String to pewnie by można było. Pokazuje to też, że typ zwracany "int/void" nie decyduje czy metoda ma unikalną sygnaturę.