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