Metode overbelastning

Vårt nye og interessante tema for i dag er metodeoverbelastning . Vær forsiktig – metodeoverbelastning må ikke forveksles med metodeoverstyring.

I motsetning til overstyring er overbelastning en veldig enkel operasjon. Det er faktisk ikke en operasjon på metoder, selv om det noen ganger refereres til med den forferdelige termen parametrisk polymorfisme .

Problemet her er at alle metoder i en klasse må ha unike navn. Vel, det er ikke helt nøyaktig. Vel, mer nøyaktig, det er ikke nøyaktig i det hele tatt. Metodenavnet trenger ikke å være unikt. Det som være unikt er foreningen av metodenavnet og typene av metodens parametere. Denne foreningen er kjent som metodesignaturen

Eksempler:

Kode Beskrivelse
public void print();
public void print2();
Dette er tillatt. De to metodene har unike navn.
public void print();
public void print(int n);
Og også dette. De to metodene har unike navn (signaturer).
public void print(int n, int n2);
public void print(int n);
Metodene er fortsatt unike
public int print(int a);
public void print(int n);
Men dette er ikke tillatt . Metodene er ikke unike . Selv om de returnerer forskjellige typer.
public int print(int a, long b);
public long print(long b, int a);
Men du kan gjøre dette . Metodeparametere er unike

Signaturen inkluderer metodenavnet og parametertypene . Den inkluderer ikke metodens returtype og parameternavn . En klasse kan ikke ha to metoder med samme signaturer - kompilatoren vil ikke vite hvilken som skal kalles.

Parameternavnene spiller ingen rolle , siden de blir borte under kompilering. Når en metode er kompilert, er bare navnet og parametertypene kjent. Returtypen går ikke tapt, men metodens resultat må ikke tilordnes noe, så det er heller ikke inkludert i signaturen.

I følge OOP- prinsipper skjuler polymorfisme forskjellige implementeringer bak et enkelt grensesnitt. Når vi kaller System.out.println()metoden, for eksempel, kalles ulike metoder avhengig av hvilke argumenter som sendes. Dette er polymorfisme i aksjon.

Det er derfor forskjellige metoder med identiske navn inneholdt i samme klasse anses å være en svak form for polymorfisme.