Sobes.tech
Middle

Papaskink apie metodų perkrovimo taisykles.

sobes.tech AI

Atsakymas iš AI

Metodų perkrovimas (Method Overloading) objektinio programavimo kalboje leidžia apibrėžti kelis metodus viename klase su tuo pačiu pavadinimu, bet skirtingomis signatūromis.

Pagrindinės metodų perkrovimo taisyklės:

  1. Skirtumas signatūrose: Metodų signatūra apima metodo pavadinimą ir jo parametrų tipų sąrašą atitinkama tvarka. Kad metodai būtų laikomi perkrautais, jų signatūros turi skirtis.

    // Skirtingų signatūrų pavyzdžiai
    void print(int i) { }
    void print(String s) { }
    void print(int i, String s) { }
    void print(String s, int i) { } // Skiriasi parametrų tvarka
    
  2. Metodo pavadinimas turi būti tas pats: Perkrauti metodai turi turėti tą patį pavadinimą.

    // Teisingas perkrovimo pavyzdys
    class Example {
        void process(int a) { }
        void process(double b) { }
    }
    
  3. Grąžinamosios reikšmės tipas nėra signatūros dalis: Tik grąžinamosios reikšmės tipo keitimas nepadaro metodo perkrautu. Kompiliatorius negalės atskirti, kurį metodą iškviesti, jei signatūros yra tokios pačios:

    // Nėra perkrovimas - klaida kompiliuojant
    int calculate() { return 1; }
    String calculate() { return "error"; }
    
  4. Prieigos modifikatoriai ir išimčių specifikatoriai neturi įtakos perkrovimui: Panašiai kaip ir grąžinamosios reikšmės tipas, keitimas tik prieigos modifikatoriuose (public, private, protected, default) arba išimčių sąraše (throws) neveda prie perkrovimo.

    // Nėra perkrovimas - klaida kompiliuojant, jei signatūros yra tokios pačios
    public void doSomething() { }
    private void doSomething() { }
    
  5. Parametrų tvarka turi reikšmę: Keičiasi parametrų tipų tvarka, signatūros skiriasi.

    // Yra perkrovimas
    void setup(int width, int height) { }
    void setup(int height, String unit) { } // Skiriasi antruoju parametru
    void setup(String unit, int size) { } // Skiriasi tipu ir tvarka
    
  6. Parametrų skaičius turi reikšmę: Skirtingas parametrų skaičius sukuria skirtingas signatūras.

    // Yra perkrovimas
    void log(String message) { }
    void log(String message, int level) { }
    

Todėl pagrindinis veiksnys, lemiantis metodų perkrovimą, yra jų signatūros unikalumas, kuris apibrėžiamas jų pavadinimu ir parametrų rinkiniu (tipais ir tvarka).