„Здравей, Амиго! Ще ти разкажа за претоварването на метода .“

"Можете и тях да претоварите?! Какъв ден!"

„Можете да направите много с тях, но няма да навлизаме в това точно сега.“

"Това е сделка."

„Претоварването е много проста операция. Всъщност това дори не е операция върху методи, въпреки че понякога се споменава с плашещо име: параметричен полиморфизъм .“

Нещото, което трябва да запомните е, че всеки метод в клас трябва да има уникално име.

"Да, знам."

„Е, това не е съвсем вярно. Искам да кажа, изобщо не е вярно. Един метод не трябва да има уникално име. Това, което трябва да бъде уникално, е комбинацията от име на метод и типовете на неговите параметри . Тази комбинация също е известен като сигнатура на метод."

Код Коментари
public void print();
public void print2();
Това е разрешено. Двата метода имат уникални имена.
public void print();
public void print(int n);
И това също е разрешено. Двата метода имат уникални имена (сигнатури).
public void print(int n, int n2);
public void print(int n);
Имената на методите все още са уникални тук.
public int print(int a);
public void print(int n);
Но това не е позволено. Методите не са уникални, въпреки че се предават различни типове.
public int print(int a, long b);
public long print(long b, int a);
Но това е позволено. Параметрите на метода са уникални.

— Това вече съм го виждал някъде.

"Да. Когато въведете " System.out.println ", IntelliJ IDEA предлага няколко дузини версии на методи за печат , които използват различни параметри. Компилаторът просто идентифицира и след това извиква необходимия метод въз основа на типовете параметри, които подавате."

"Това не е толкова трудно. Но не е полиморфизъм."

„Или по-точно, това не е отмяна на метода.“

Между другото, искам да отбележа, че имената на параметрите са без meaning. Те се губят по време на компилация. След като методът е изпълнен, са известни само неговото име и типове параметри.