Kas yra metodo perkrovimas?

Metodo perkrova yra daugumos objektinio programavimo kalbų funkcija, kai du ar daugiau metodų turi tą patį pavadinimą, bet turi skirtingus parametrus. Konkrečiai, skiriasi parametrų skaičius, duomenų tipas ir (arba) tvarka. Kai kodas sukompiliuojamas, pagal tai, kaip jis iškviečiamas, bus automatiškai parinktas tinkamas metodas. Kai kuriose programavimo kalbose metodai taip pat žinomi kaip funkcijos, todėl metodo perkrovimas kartais vadinamas funkcijų perkrovimu.

Paprastas metodo perkrovimo pavyzdys būtų kvadrato plotą apskaičiuojantis metodas. Jis gali būti apibrėžtas kaip getArea (Square s). Šis metodas gali būti perkrautas, norint papildomai apskaičiuoti apskritimo plotą, pridedant metodą getArea(Circle c).

Pagrindinis metodo perkrovimo reikalavimas yra tas, kad metodai turėtų tą patį pavadinimą. Kitu atveju jų metodo parašai – metodo pavadinimas, parametrų skaičius ir parametrų duomenų tipai – turėtų būti unikalūs. Tokiu būdu kompiliatorius gali nustatyti, kurį metodą vykdyti.

Konstruktoriai, metodai, naudojami objektams sukurti, dažnai yra perkrauti. Tai atliekama norint inicijuoti objektą su ne numatytosiomis reikšmėmis. Pavyzdžiui, darbuotojo objektas su dviem laukais (vardas ir gimimo data arba gimimo data) gali turėti šiuos perkrautus konstruktorius: Darbuotojas (), Darbuotojas (vardas) ir Darbuotojas (vardas, gimimo data). Pirmasis konstruktorius sukuria darbuotojo objektą su tuščiais pavadinimo ir dob laukais. Antrasis nustato pavadinimo lauką, bet palieka tuščią lauką, o trečiasis apibrėžia ir pavadinimo, ir gimimo laukus.

Metodo perkrovimas dažniausiai atliekamas tam, kad daugiau nei vienas metodas logiškai atrodytų kaip vienas metodas. GetArea() pavyzdyje, nors fiziškai yra du metodai, skambintojui pateikiamas vienas loginis getArea() metodas. Tokiu būdu getArea() gali būti išplėstas, kad būtų galima dirbti su kitomis formomis – trikampiais, trapecijomis ir t. t. – tuo pačiu logiškai pateikiant save kaip vieną metodą.

Metodai taip pat yra perkrauti, kad būtų išsaugotas atgalinis suderinamumas. Metodui, kuris atlieka sudėtingą skaičiavimą, gali būti pateiktas naujas reikalavimas pasirinktinai atlikti tą patį skaičiavimą su nedideliu pakeitimu. Prie metodo pridedamas naujas parametras, kuris nustatys, kaip atlikti skaičiavimą – senuoju ar nauju būdu.
Kad nereikėtų rasti visų atvejų, kai metodas iškviečiamas, ir pridėti naują parametrą, metodas gali būti perkrautas. Naujasis metodas turės seną parašą ir bus iškviestas esamu kodu. Jame nebus jokios logikos, jis tiesiog iškvies pakeistą metodą ir pagal numatytuosius nustatymus perduos naująjį parametrą „senu būdu“. Naujas kodas iškvies pakeistą metodą ir perduos naują parametrą su atitinkama reikšme, senuoju būdu arba nauju būdu.
Metodo perkrovimas yra polimorfizmo rūšis, kai tas pats loginis metodas praktiškai gali būti naudojamas įvairiais būdais. Metodo perkrovimas nėra tas pats, kas metodo nepaisymas. Metodo nepaisymas yra tada, kai pagrindinės klasės metodo apibrėžimą pakeičia antrinė klasė. Tokiu atveju abu metodai turės tą patį parašą.