Supraîncărcarea metodei

Subiectul nostru nou și interesant pentru astăzi este supraîncărcarea metodelor . Fiți atenți – supraîncărcarea metodei nu trebuie confundată cu suprascrierea metodei.

Spre deosebire de suprascriere, supraîncărcarea este o operație foarte simplă. De fapt, nu este o operațiune asupra metodelor, deși uneori se face referire la termenul teribil de polimorfism parametric .

Problema aici este că toate metodele dintr-o clasă trebuie să aibă nume unice. Ei bine, asta nu este complet exact. Ei bine, mai exact, nu este deloc exact. Numele metodei nu trebuie să fie unic. Ceea ce trebuie să fie unic este unirea numelui metodei și a tipurilor de parametri ai metodei. Această unire este cunoscută ca semnătura metodei

Exemple:

Cod Descriere
public void print();
public void print2();
Acest lucru este permis. Cele două metode au nume unice.
public void print();
public void print(int n);
Si tot asta. Cele două metode au nume unice (semnături).
public void print(int n, int n2);
public void print(int n);
Metodele sunt încă unice
public int print(int a);
public void print(int n);
Dar acest lucru nu este permis . Metodele nu sunt unice . Chiar dacă returnează tipuri diferite.
public int print(int a, long b);
public long print(long b, int a);
Dar poți face asta . Parametrii metodei sunt unici

Semnătura include numele metodei și tipurile de parametri . Nu include tipul de returnare al metodei și numele parametrilor . O clasă nu poate avea două metode cu aceleași semnături — compilatorul nu va ști pe care să o apeleze.

Numele parametrilor nu contează , deoarece se pierd în timpul compilării. Odată ce o metodă este compilată, sunt cunoscute doar numele și tipurile de parametri. Tipul de returnare nu se pierde, dar rezultatul metodei nu trebuie să fie atribuit la nimic, deci nu este inclus în semnătură.

Conform principiilor OOP , polimorfismul ascunde diferite implementări în spatele unei singure interfețe. Când apelăm System.out.println()metoda, de exemplu, sunt apelate diferite metode în funcție de argumentele transmise. Acesta este polimorfismul în acțiune.

De aceea, metode diferite cu nume identice conținute în aceeași clasă sunt considerate a fi o formă slabă de polimorfism.