Sobes.tech
Middle

Mesélj a metódusok túlterhelésének szabályairól.

sobes.tech MI

Válasz az MI-től

A metódusok túlterhelése (Method Overloading) az objektumorientált programozásban lehetővé teszi több metódus meghatározását ugyanabban a osztályban ugyanazzal a névvel, de különböző aláírásokkal.

A metódus túlterhelésének fő szabályai:

  1. Különbség az aláírásokban: Egy metódus aláírása magában foglalja a metódus nevét és a paraméterek típusainak listáját a megfelelő sorrendben. Ahhoz, hogy a metódusokat túlterhelteknek tekintsük, az aláírásaiknak különbözniük kell.

    // Különböző aláírások példái
    void print(int i) { }
    void print(String s) { }
    void print(int i, String s) { }
    void print(String s, int i) { } // Paraméterek sorrendje különböző
    
  2. A metódus neve ugyanaz kell legyen: A túlterhelt metódusoknak ugyanazzal a névvel kell rendelkezniük.

    // Helyes túlterhelési példa
    class Example {
        void process(int a) { }
        void process(double b) { }
    }
    
  3. A visszatérési típus nem része az aláírásnak: Csak a visszatérési típus megváltoztatása nem teszi túlterheltté a metódusokat. A fordító nem tudja megkülönböztetni, melyik metódust kell meghívni, ha az paraméter aláírások azonosak.

    // Nem túlterhelés - fordítási hiba
    int calculate() { return 1; }
    String calculate() { return "error"; }
    
  4. A hozzáférési módosítók és a kivétel specifikátorok nem befolyásolják a túlterhelést: Hasonlóan a visszatérési típushoz, a hozzáférési módosítók (public, private, protected, default) vagy a dobott kivételek (throws) listájának megváltoztatása nem vezet túlterheléshez.

    // Nem túlterhelés - fordítási hiba, ha az aláírások megegyeznek
    public void doSomething() { }
    private void doSomething() { }
    
  5. A paraméterek sorrendje számít: A paraméter típusainak sorrendjének megváltoztatása különböző aláírásokat eredményez.

    // Ez túlterhelés
    void setup(int width, int height) { }
    void setup(int height, String unit) { } // Második paraméter különböző
    void setup(String unit, int size) { } // Típus és sorrend különböző
    
  6. A paraméterek száma számít: A különböző paraméter számok különböző aláírásokat eredményeznek.

    // Ez túlterhelés
    void log(String message) { }
    void log(String message, int level) { }
    

Ezért a metódus túlterhelésének kulcsfontosságú tényezője a metódus aláírásának egyedisége, amelyet a neve és a paraméterek (típusok és sorrend) halmaza határoz meg.