"Bună, Amigo! O să-ți spun despre supraîncărcarea metodei ."

"Le poți supraîncărca și tu?! Ce zi!"

„Poți face multe cu ei, dar nu vom intra în asta chiar acum”.

"S-a făcut."

„Supraîncărcarea este o operațiune foarte simplă. De fapt, nu este nici măcar o operație pe metode, deși uneori este denumită un nume înspăimântător: polimorfism parametric ”.

Lucrul pe care trebuie să-l rețineți este că fiecare metodă dintr-o clasă trebuie să aibă un nume unic.

"Da, stiu."

„Ei bine, nu este în întregime adevărat. Adică, nu este deloc adevărat. O metodă nu trebuie să aibă un nume unic. Ceea ce trebuie să fie unic este combinația dintre numele unei metode și tipurile parametrilor acesteia. Această combinație este, de asemenea , cunoscută ca semnătură de metodă”.

Cod Comentarii
public void print();
public void print2();
Acest lucru este permis. Cele două metode au nume unice.
public void print();
public void print(int n);
Și acest lucru este permis. Cele două metode au nume unice (semnături).
public void print(int n, int n2);
public void print(int n);
Numele metodelor sunt încă unice aici.
public int print(int a);
public void print(int n);
Dar acest lucru nu este permis. Metodele nu sunt unice, chiar dacă sunt trecute diferite tipuri.
public int print(int a, long b);
public long print(long b, int a);
Dar acest lucru este permis. Parametrii metodei sunt unici.

— Am văzut deja asta pe undeva.

"Da. Când tastați " System.out.println ", IntelliJ IDEA sugerează câteva zeci de versiuni de metode de imprimare care utilizează parametri diferiți. Compilatorul identifică și apoi apelează metoda necesară în funcție de tipurile de parametri pe care îi transmiteți."

"Nu este atât de dificil. Dar nu este polimorfism."

„Sau mai exact, nu este o metodă de depășire”.

Apropo, vreau să subliniez că numele parametrilor sunt irelevante. Se pierd în timpul compilării. Odată ce o metodă este respectată, sunt cunoscute doar numele și tipurile de parametri.