— Привіт! Я розповім тобі про перевантаження методів.
— Їх ще й перевантажувати можна? Та що за день сьогодні такий!
— З ними багато чого можна робити, але не будемо про це.
— Згоден.
— Перевантаження – це дуже проста операція. Насправді це навіть не операція над методами, хоча іноді її називають страшним словосполученням – параметричний поліморфізм.
Річ у тім, що всі методи в класі повинні мати унікальні імена.
— Так, я знаю про це.
— Так от: це не зовсім так, а точніше — зовсім не так. Метод не повинен мати унікальне ім'я. Унікальною має бути сукупність імені і типів параметрів цього методу. Їх ще називають сигнатурами методів.
Код | Опис |
---|---|
|
Так можна. Два методи мають унікальні імена. |
|
І так можна. Два методи мають унікальні імена (сигнатури). |
|
Все еще унікальні методи. |
|
А так не можна. Методи не є унікальними, хоча й повертають різні типи. |
|
А так – можна. Параметри методів унікальні. |
— Десь я вже таке бачив.
— Ага. Коли ти пишеш System.out.println, Intellij IDEA допомагає тобі і видає в підказці пару десятків методів із різними параметрами. Компілятор просто визначить потрібний метод за типами змінних, які ти туди передаєш, і пропише виклик саме його.
— Це начебто нескладно. Все ж не поліморфізм.
— Точніше — не перевизначення методів.
До речі, звертаю твою увагу, що імена параметрів ролі не відіграють – вони губляться під час компіляції. Після компіляції про метод відомо тільки його ім'я та типи параметрів.