Sobes.tech
Middle

Pověz mi o pravidlech přetížení metod.

sobes.tech AI

Odpověď od AI

Metodové přetížení (Method Overloading) v objektově orientovaném programování umožňuje definovat několik metod ve stejné třídě se stejným názvem, ale s různými signaturami.

Hlavní pravidla pro přetížení metod:

  1. Rozdíl v signaturách: Signatura metody zahrnuje název metody a seznam typů jejích parametrů ve správném pořadí. Aby byly metody považovány za přetížené, jejich signatury se musí lišit.

    // Příklady odlišných signatur
    void print(int i) { }
    void print(String s) { }
    void print(int i, String s) { }
    void print(String s, int i) { } // Odlišné pořadí parametrů
    
  2. Název metody musí být stejný: Přetížené metody musí mít stejný název.

    // Správný příklad přetížení
    class Example {
        void process(int a) { }
        void process(double b) { }
    }
    
  3. Typ návratu není součástí signatury: Změna pouze typu návratu nezpůsobí přetížení metod. Kompilátor nemůže rozlišit, kterou metodu volat, pokud jsou signatury parametrů stejné.

    // Není přetížení - chyba kompilátoru
    int calculate() { return 1; }
    String calculate() { return "error"; }
    
  4. Modifikátory přístupu a specifikátory výjimek neovlivňují přetížení: Podobně jako typ návratu, změna pouze modifikátorů přístupu (public, private, protected, default) nebo seznamu vyhazovaných výjimek (throws) nevede k přetížení.

    // Není přetížení - chyba kompilátoru, pokud jsou signatury parametrů stejné
    public void doSomething() { }
    private void doSomething() { }
    
  5. Pořadí parametrů má význam: Změna pořadí typů parametrů činí signatury odlišnými.

    // Je přetížení
    void setup(int width, int height) { }
    void setup(int height, String unit) { } // Odlišný druhý parametr
    void setup(String unit, int size) { } // Odlišný typ a pořadí parametrů
    
  6. Počet parametrů má význam: Různý počet parametrů vede k odlišným signaturám.

    // Je přetížení
    void log(String message) { }
    void log(String message, int level) { }
    

Proto je klíčovým faktorem pro přetížení metod jedinečnost signatury metody, která je určena jejím názvem a sadou (typy a pořadí) parametrů.