Перевантаження методів
І ще одна нова та цікава тема на сьогодні — перевантаження методів. Або як її ще часто називають, overloading (перевизначення — це overriding).
На відміну від перевизначення, перевантаження — це дуже проста операція. Насправді це навіть не операція над методами, хоча іноді її називають страшним словосполученням — параметричний поліморфізм.
Справа в тому, що всі методи всередині класу повинні мати унікальні імена. Так ось, це не зовсім так. Вірніше, зовсім не так. Метод не повинен мати унікальне ім'я. Унікальним має бути об'єднання імені та типів параметрів цього методу. Такі об'єднання ще називають сигнатурами методів
Приклади:
| Код | Опис |
|---|---|
|
Так можна. Два методи мають унікальні імена. |
|
І так можна. Два методи мають унікальні імена (сигнатури). |
|
Все ще унікальні методи |
|
А так не можна. Методи — не унікальні. Хоч і повертають різні типи. |
|
А так — можна. Параметри методів унікальні. |
До сигнатури входить: ім'я методу і типи параметрів. Не входить: тип результату методу і імена параметрів. У класі не може бути двох методів з однаковими сигнатурами: компілятор не зрозуміє, який із них необхідно викликати.
Імена параметрів ролі не грають : вони втрачаються під час компіляції. Після компіляції про метод відомо лише його ім'я і типи параметрів. Тип результату не втрачається, але результат функції не обов’язково чомусь присвоювати, тому його теж не включають до сигнатури.
Відповідно до принципів ООП, поліморфізм — це приховування різних реалізацій за одним інтерфейсом. А оскільки при виклику методу System.out.println(), наприклад, залежно від параметрів викликаються різні методи, формально це підпадає під визначення поліморфізму.
Саме тому різні методи з однаковими іменами, які знаходяться в одному класі, прийнято вважати хоча й слабкою, але все ж формою поліморфізму.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ