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