Sobes.tech
Middle

Povedz mi o pravidlách preťažovania metód.

sobes.tech AI

Odpoveď od AI

Preťažovanie metód (Method Overloading) v objektovo orientovanom programovaní umožňuje definovať niekoľko metód v jednej triede s rovnakým menom, ale s rôznymi signatúrami.

Hlavné pravidlá pre preťažovanie metód:

  1. Rozdiely v signatúrach: Signatúra metódy zahŕňa názov metódy a zoznam typov jej parametrov v príslušnom poradí. Aby sa metódy považovali za preťažené, ich signatúry musia byť odlišné.

    // Príklady odlišných signatúr
    void print(int i) { }
    void print(String s) { }
    void print(int i, String s) { }
    void print(String s, int i) { } // Odlišný poradím parametrov
    
  2. Názov metódy musí byť rovnaký: Preťažené metódy musia mať rovnaký názov.

    // Správny príklad preťaženia
    class Example {
        void process(int a) { }
        void process(double b) { }
    }
    
  3. Typ návratovej hodnoty nie je súčasťou signatúry: Zmena len typu návratovej hodnoty nezabezpečuje, že metódy sú preťažené. Kompilátor nebude vedieť rozlíšiť, ktorú metódu volať, ak majú rovnaké signatúry parametrov.

    // Nie je preťaženie - chyba kompilácie
    int calculate() { return 1; }
    String calculate() { return "error"; }
    
  4. Modifikátory prístupu a špecifikátory výnimiek neovplyvňujú preťažovanie: Podobne ako typ návratovej hodnoty, zmena len modifikátorov prístupu (public, private, protected, default) alebo zoznamu vyhadzovaných výnimiek (throws) nevedie k preťažovaniu.

    // Nie je preťaženie - chyba kompilácie, ak sú signatúry parametrov rovnaké
    public void doSomething() { }
    private void doSomething() { }
    
  5. Poradie parametrov má význam: Zmena poradia typov parametrov robí signatúry odlišnými.

    // Je preťaženie
    void setup(int width, int height) { }
    void setup(int height, String unit) { } // Odlišný druhým parametrom
    void setup(String unit, int size) { } // Odlišný typom a poradím parametrov
    
  6. Počet parametrov má význam: Rôzny počet parametrov vedie k odlišným signatúram.

    // Je preťaženie
    void log(String message) { }
    void log(String message, int level) { }
    

Preto je kľúčovým faktorom pre preťažovanie jedinečnosť signatúry metódy, ktorá je definovaná jeho menom a súborom (typmi a poradím) parametrov.