Ce este supraîncărcarea metodei?

Supraîncărcarea metodelor este o caracteristică în majoritatea limbajelor de programare orientate pe obiecte în care două sau mai multe metode au același nume, dar au parametri diferiți. Mai exact, numărul, tipul de date și/sau ordinea parametrilor sunt diferite. Când codul este compilat, metoda corectă va fi selectată automat în funcție de modul în care este apelată. Metodele sunt cunoscute și ca funcții în unele limbaje de programare, așa că supraîncărcarea metodelor este uneori denumită supraîncărcare de funcții.

Un exemplu simplu de supraîncărcare a metodei ar fi o metodă care calculează aria unui pătrat. Ar putea fi definit ca getArea(Square s). Această metodă ar putea fi supraîncărcată pentru a calcula suplimentar aria cercului prin adăugarea metodei getArea(Circle c).

Cerința principală pentru supraîncărcarea metodelor este ca metodele să aibă același nume. Semnăturile metodei lor – numele metodei, numărul de parametri și tipurile de date ale parametrilor – ar trebui altfel să fie unice. În acest fel, compilatorul poate determina ce metodă să execute.

Constructorii, metodele folosite pentru a instanția obiecte, sunt adesea supraîncărcați. Acest lucru se face pentru a inițializa un obiect cu valori care nu sunt implicite. De exemplu, un obiect angajat cu două câmpuri (nume și data nașterii sau data nașterii) poate avea următorii constructori supraîncărcați: Angajat(), Angajat(nume) și Angajat(nume, data). Primul constructor creează un obiect angajat cu nume și câmpuri dob necompletate. Al doilea setează câmpul nume, dar lasă câmpul dob necompletat, iar al treilea definește atât câmpul nume, cât și câmpul dob.

Supraîncărcarea metodei se face cel mai adesea pentru a face mai multe metode să apară logic ca o singură metodă. În exemplul getArea(), în timp ce fizic există două metode, apelantul este prezentat cu o singură metodă logică getArea(). În acest fel, getArea() poate fi extins pentru a lucra pe alte forme – triunghiuri, trapeze și așa mai departe – prezentându-se totuși logic ca o singură metodă.

Metodele sunt, de asemenea, supraîncărcate pentru a păstra compatibilitatea cu versiunea anterioară. O metodă care face un calcul complex ar putea primi o nouă cerință de a efectua, opțional, același calcul cu o ușoară modificare. La metoda se adaugă un nou parametru care va determina modul de efectuare a calculului – modul vechi sau modul nou.
Pentru a evita nevoia de a găsi toate cazurile în care metoda este apelată și de a adăuga noul parametru, metoda poate fi supraîncărcată. Noua metodă va avea vechea semnătură și va fi apelată de codul existent. Nu va conține nicio logică în sine și va apela pur și simplu metoda modificată și va trece implicit „modul vechi” pentru noul parametru. Codul nou va apela metoda modificată și va transmite noul parametru cu valoarea corespunzătoare, mod vechi sau mod nou.
Supraîncărcarea metodei este un tip de polimorfism, în care aceeași metodă logică poate fi, în practică, utilizată în mai multe moduri. Supraîncărcarea metodei nu este același lucru cu suprasolicitarea metodei. Suprascrierea metodei este cazul în care definiția unei metode într-o clasă părinte este schimbată de o clasă copil. În acest caz, ambele metode vor avea aceeași semnătură.