Претоварване на метода

Нашата нова и интересна тема за днес е претоварването на методите . Бъдете внимателни — претоварването на метода не трябва да се бърка с отмяната на метода.

За разлика от замяната, претоварването е много проста операция. Това всъщност не е операция върху методи, въпреки че понякога се нарича с ужасния термин параметричен полиморфизъм .

Проблемът тук е, че всички методи в клас трябва да имат уникални имена. Е, това не е съвсем точно. Е, по-точно, това изобщо не е точно. Името на метода не трябва да е уникално. Това, което трябва да бъде уникално, е обединението на името на метода и типовете параметри на метода. Това обединение е известно като сигнатура на метода

Примери:

Код Описание
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);
Но вие можете да направите това . Параметрите на метода са уникални

Сигнатурата включва името на метода и типовете параметри . Не включва върнатия тип на метода и имена на параметри . Един клас не може да има два метода с еднакви сигнатури — компилаторът няма да знае кой да извика.

Имената на параметрите нямат meaning , тъй като се губят по време на компилация. След като методът е компorран, са известни само неговото име и типове параметри. Върнатият тип не се губи, но резултатът от метода не трябва да бъде присвоен на нищо, така че той също не е включен в подписа.

Според принципите на ООП , полиморфизмът крие различни реализации зад един интерфейс. Когато извикаме System.out.println()метода, например, се извикват различни методи в зависимост от това кои аргументи се предават. Това е полиморфизъм в действие.

Ето защо различните методи с еднакви имена, съдържащи се в един и същи клас, се считат за слаба форма на полиморфизъм.