"Hej, Amigo! Jag ska berätta om metodöverbelastning ."

"Du kan överbelasta dem också?! Vilken dag!"

— Man kan göra mycket med dem, men det går vi inte in på just nu.

"Det är en deal."

"Överbelastning är en mycket enkel operation. Egentligen är det inte ens en operation på metoder, även om det ibland hänvisas till med ett skrämmande namn: parametrisk polymorfism ."

Det du måste komma ihåg är att varje metod i en klass måste ha ett unikt namn.

"Ja jag vet."

"Tja, det är inte helt sant. Jag menar, det är inte alls sant. En metod behöver inte ha ett unikt namn. Det som måste vara unikt är kombinationen av ett metodnamn och typerna av dess parametrar . Denna kombination är också känd som en metodsignatur."

Koda Kommentarer
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 detta är också tillåtet. De två metoderna har unika namn (signaturer).
public void print(int n, int n2);
public void print(int n);
Metodnamnen är fortfarande unika här.
public int print(int a);
public void print(int n);
Men detta är inte tillåtet. Metoderna är inte unika, även om olika typer passeras.
public int print(int a, long b);
public long print(long b, int a);
Men detta är tillåtet. Metodparametrarna är unika.

"Jag har redan sett det någonstans."

"Japp. När du skriver " System.out.println ", föreslår IntelliJ IDEA ett par dussin versioner av utskriftsmetoder som använder olika parametrar. Kompilatorn identifierar helt enkelt och anropar den metod som krävs baserat på typen av parametrar du skickar."

"Det är inte så svårt. Men det är inte polymorfism."

"Eller mer exakt, det är inte metodöverskridande."

För övrigt vill jag påpeka att parameternamnen är irrelevanta. De går förlorade under sammanställningen. När en metod väl har följts är bara dess namn och parametertyper kända.