Sobes.tech
Middle

Opowiedz o zasadach przeciążania metod.

sobes.tech AI

Odpowiedź od AI

Przeciążanie metod (Method Overloading) w programowaniu obiektowym pozwala na zdefiniowanie kilku metod w jednej klasie o tej samej nazwie, ale z różnymi sygnaturami.

Główne zasady przeciążania metod:

  1. Różnice w sygnaturach: Sygnatura metody obejmuje nazwę metody i listę typów jej parametrów w odpowiednim porządku. Aby metody były uznane za przeciążone, ich sygnatury muszą się różnić.

    // Przykłady różnych sygnatur
    void print(int i) { }
    void print(String s) { }
    void print(int i, String s) { }
    void print(String s, int i) { } // Różny kolejność parametrów
    
  2. Nazwa metody musi być taka sama: Metody przeciążone muszą mieć tę samą nazwę.

    // Poprawny przykład przeciążenia
    class Example {
        void process(int a) { }
        void process(double b) { }
    }
    
  3. Typ zwracany nie jest częścią sygnatury: Zmiana tylko typu zwracanego nie powoduje przeciążenia metod. Kompilator nie będzie mógł rozróżnić, którą metodę wywołać, jeśli sygnatury parametrów są takie same.

    // Nie jest przeciążeniem - błąd kompilacji
    int calculate() { return 1; }
    String calculate() { return "error"; }
    
  4. Modyfikatory dostępu i specyfikatory wyjątków nie wpływają na przeciążenie: Podobnie jak typ zwracany, zmiana tylko modyfikatorów dostępu (public, private, protected, domyślny) lub listy rzucanych wyjątków (throws) nie prowadzi do przeciążenia.

    // Nie jest przeciążeniem - błąd kompilacji, jeśli sygnatury parametrów są takie same
    public void doSomething() { }
    private void doSomething() { }
    
  5. Kolejność parametrów ma znaczenie: Zmiana kolejności typów parametrów powoduje różne sygnatury.

    // Jest przeciążeniem
    void setup(int width, int height) { }
    void setup(int height, String unit) { } // Różni się drugim parametrem
    void setup(String unit, int size) { } // Różni się typem i kolejnością parametrów
    
  6. Liczba parametrów ma znaczenie: Różne liczby parametrów prowadzą do różnych sygnatur.

    // Jest przeciążeniem
    void log(String message) { }
    void log(String message, int level) { }
    

Dlatego kluczowym czynnikiem dla przeciążania metod jest unikalność sygnatury metody, która jest określana przez jej nazwę i zestaw (typy i kolejność) parametrów.