Sobes.tech
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)