Metodöverbelastning

Vårt nya och intressanta ämne för idag är metodöverbelastning . Var försiktig – metodöverbelastning får inte förväxlas med metodöverskridande.

Till skillnad från överstyrning är överbelastning en mycket enkel operation. Det är faktiskt inte en operation på metoder, men ibland hänvisas det till med den fruktansvärda termen parametrisk polymorfism .

Problemet här är att alla metoder inom en klass måste ha unika namn. Tja, det är inte helt korrekt. Tja, mer exakt, det är inte alls korrekt. Metodnamnet behöver inte vara unikt. Det som måste vara unikt är föreningen av metodnamnet och typerna av metodens parametrar. Denna förening är känd som metodsignaturen

Exempel:

Koda Beskrivning
public void print();
public void print2();
Detta är tillåtet. De två metoderna har unika namn.
public void print();
public void print(int n);
Och även detta. De två metoderna har unika namn (signaturer).
public void print(int n, int n2);
public void print(int n);
Metoderna är fortfarande unika
public int print(int a);
public void print(int n);
Men detta är inte tillåtet . Metoderna är inte unika . Även om de returnerar olika typer.
public int print(int a, long b);
public long print(long b, int a);
Men du kan göra det här . Metodparametrar är unika

Signaturen inkluderar metodnamnet och parametertyperna . Den inkluderar inte metodens returtyp och parameternamn . En klass kan inte ha två metoder med samma signaturer — kompilatorn vet inte vilken den ska anropa.

Parameternamnen spelar ingen roll eftersom de går vilse under kompileringen. När en metod väl har kompilerats är bara dess namn och parametertyper kända. Returtypen går inte förlorad, men metodens resultat behöver inte tilldelas någonting, så det ingår inte heller i signaturen.

Enligt OOP- principer döljer polymorfism olika implementeringar bakom ett enda gränssnitt. När vi till exempel anropar System.out.println()metoden anropas olika metoder beroende på vilka argument som skickas. Detta är polymorfism i aktion.

Det är därför olika metoder med identiska namn som finns i samma klass anses vara en svag form av polymorfism.