Sobes.tech
Middle

Räägi mulle meetodite ülekoormamise reeglitest.

sobes.tech AI

Vastus AI-lt

Meetodite ülekoormamine (Method Overloading) objektorienteeritud programmeerimises võimaldab määratleda ühe klassi sees mitu meetodit sama nimega, kuid erinevate signatuuridega.

Meetodite ülekoormamise põhireeglid:

  1. Signatuurides on erinevused: Meetodi signatuur hõlmab meetodi nime ja tema parameetrite tüübilisti vastavas järjekorras. Selleks, et meetodid loetakse ülekoormatuks, peavad nende signatuurid eristuma.

    // Erinevate signatuuride näited
    void print(int i) { }
    void print(String s) { }
    void print(int i, String s) { }
    void print(String s, int i) { } // Parameetrite järjekord erineb
    
  2. Meetodi nimi peab olema sama: Ülekoormatavad meetodid peavad omama sama nime.

    // Õige ülekoormamise näide
    class Example {
        void process(int a) { }
        void process(double b) { }
    }
    
  3. Tagastatava väärtuse tüüp ei ole signatuuri osa: Ainult tagastatava väärtuse tüübi muutmine ei tee meetodeid ülekoormatuks. Kompilatsioonieeskirjad ei võimalda eristada, millist meetodit kutsuda, kui signatuurid on samad:

    // Ei ole ülekoormus - kompileerimisviga
    int calculate() { return 1; }
    String calculate() { return "error"; }
    
  4. Juhtimismodifikatorid ja erandite spetsifikatsioonid ei mõjuta ülekoormust: Sarnaselt tagastatava väärtuse tüübile, ei mõjuta ainult juurdepääsukmodifikatorite (public, private, protected, default) või erandite loendi (throws) muutmine ülekoormust:

    // Ei ole ülekoormus - kompileerimisviga, kui signatuurid on samad
    public void doSomething() { }
    private void doSomething() { }
    
  5. Parameetrite järjekord on oluline: Parameetrite tüüpide muutmine muudab signatuurid erinevaks.

    // On ülekoormus
    void setup(int width, int height) { }
    void setup(int height, String unit) { } // Erineb teise parameetriga
    void setup(String unit, int size) { } // Erineb tüübist ja järjekorrast
    
  6. Parameetrite arv on oluline: Erinev arv parameetreid loob erinevad signatuurid:

    // On ülekoormus
    void log(String message) { }
    void log(String message, int level) { }
    

Seega, meetodite ülekoormamise peamine tegur on signatuuri unikaalsus, mis määratakse selle nime ja parameetrite (tüüpide ja järjekorra) kogumi alusel.