Junior
Co można zmienić podczas przeciążania metod w programowaniu?
sobes.tech AI
Odpowiedź od AI
Przeciążanie metod (method overloading) można zmienić:
- Liczbę parametrów: Metody o tej samej nazwie mogą mieć różną liczbę parametrów formalnych.
- Typy parametrów: Metody o tej samej nazwie i tej samej liczbie parametrów mogą różnić się typami tych parametrów.
- Kolejność typów parametrów: Jeśli metody mają tę samą liczbę parametrów i te same typy, ale w innym porządku, jest to również uznawane za przeciążenie.
Przykład w Java:
// Klasa z przeciążonymi metodami
class Calculator {
// Metoda dodawania dwóch liczb całkowitych
public int add(int a, int b) {
return a + b;
}
// Przeciążona metoda: dodawanie trzech liczb całkowitych
public int add(int a, int b, int c) {
return a + b + c;
}
// Przeciążona metoda: dodawanie dwóch liczb zmiennoprzecinkowych
public double add(double a, double b) {
return a + b;
}
// Przeciążona metoda: dodawanie liczby całkowitej i liczby zmiennoprzecinkowej
public double add(int a, double b) {
return a + b;
}
// Przeciążona metoda: dodawanie liczby zmiennoprzecinkowej i liczby całkowitej
public double add(double a, int b) {
return a + b;
}
}
Co nie można zmienić podczas przeciążania metod:
- Typu zwracanego: Dwie metody o tej samej nazwie i tej samej sygnaturze (liczba, typy i kolejność parametrów) nie mogą różnić się tylko typem zwracanego wyniku.
- Modyfikatorów dostępu: Modyfikatory dostępu (public, private, protected, default) nie wpływają na przeciążanie.
- Obecności lub braku słowa kluczowego
static: Nie można przeciążyć metody statycznej, definiując metodę niestatyczną o tej samej sygnaturze, lub odwrotnie. - Lista wyjątków zgłaszanych przez metodę: Lista wyjątków nie jest częścią sygnatury metody i nie jest używana przez kompilator do rozróżniania przeciążonych metod.
Porównanie przeciążania i nadpisywania metod:
| Cecha | Przeciążanie (Overloading) | Nadpisywanie (Overriding) |
|---|---|---|
| Gdzie się dzieje | W tej samej klasie lub w hierarchii klas | W klasie pochodnej |
| Nazwa metody | Taka sama | Taka sama |
| Sygnatura metody | Różna (liczba, typy, kolejność parametrów) | Taka sama |
| Typ zwracany | Może być różny (ale nie jest to jedyna różnica) | Musi być taki sam lub kowariantny (dla obiektów) |
| Cel | Zapewnienie różnych wariantów jednej akcji dla różnych typów danych lub ilości argumentów | Zmiana zachowania odziedziczonej metody w klasie pochodnej |
| Związek między metodami | Niezależne metody | Związek "jest" (dziedziczenie) |
| Polimorfizm | Polimorfizm na etapie kompilacji (statyczny) | Polimorfizm na etapie wykonania (dynamiczny) |