Metode overbelastning

Vores nye og interessante emne for i dag er metodeoverbelastning . Vær forsigtig - metodeoverbelastning må ikke forveksles med metodetilsidesættelse.

I modsætning til tilsidesættelse er overbelastning en meget enkel operation. Det er faktisk ikke en operation på metoder, selvom det nogle gange omtales med det forfærdelige udtryk parametrisk polymorfi .

Problemet her er, at alle metoder inden for en klasse skal have unikke navne. Nå, det er ikke helt præcist. Nå, mere præcist, det er slet ikke nøjagtigt. Metodens navn behøver ikke at være unikt. Det, der skal være unikt, er foreningen af ​​metodenavnet og typerne af metodens parametre. Denne forening er kendt som metodesignaturen

Eksempler:

Kode Beskrivelse
public void print();
public void print2();
Dette er tilladt. De to metoder har unikke navne.
public void print();
public void print(int n);
Og også dette. De to metoder har unikke navne (signaturer).
public void print(int n, int n2);
public void print(int n);
Metoderne er stadig unikke
public int print(int a);
public void print(int n);
Men dette er ikke tilladt . Metoderne er ikke unikke . Også selvom de returnerer forskellige typer.
public int print(int a, long b);
public long print(long b, int a);
Men du kan gøre dette . Metodeparametre er unikke

Signaturen inkluderer metodenavnet og parametertyperne . Det inkluderer ikke metodens returtype og parameternavne . En klasse kan ikke have to metoder med de samme signaturer - compileren ved ikke, hvilken der skal kaldes.

Parameternavnene er ligegyldige , da de går tabt under kompilering. Når først en metode er kompileret, er kun dens navn og parametertyper kendt. Returtypen går ikke tabt, men metodens resultat skal ikke tildeles noget, så det indgår heller ikke i signaturen.

Ifølge OOP- principperne skjuler polymorfi forskellige implementeringer bag en enkelt grænseflade. Når vi kalder System.out.println()metoden, kaldes der for eksempel forskellige metoder alt efter hvilke argumenter der sendes. Dette er polymorfi i aktion.

Det er grunden til, at forskellige metoder med identiske navne indeholdt i samme klasse anses for at være en svag form for polymorfi.