Другие языки программирования и технологии

Является ли перегрузка методов проявлением полиморфизма?

Аркадий Дар
Аркадий Дар
1 530
Это один из видов полиморфизма. Википедия сообщает, что такой полиморфизм не является истинным полиморфизм.
https://ru.wikipedia.org/wiki/Полиморфизм_(информатика)
Вадим Тихомиров
Вадим Тихомиров
36 282
Лучший ответ
И да, и нет. Смотря что они имеют в виду под полиморфизмом.
В общем случае полиморфизм это возможность обращаться одинаковым образом с сущностями разных типов. Или, чуть более научно, существование общего интерфейса (в отрыве от C#) у сущностей различных типов. Это очень общее понятие, которое можно очень много на что натянуть. Что при этом произойдёт и какие абстракции языка при этом будут задействованы, не столь важно.

К этому полиморфизму перегрузка методов относится самым прямым образом: это ad-hoc полиморфизм для функции: в неё можно передавать различные типы (в границах реализованных перегрузок) и при этом будет выполнен разный код. (А методы объектов классов можно рассматривать, как функции с дополнительным неявным аргументом: объектом, у которого метод вызывается [this в шарпе].)

Может возникнуть закономерный вопрос: не являются ли тогда различные перегрузки разными функциями, не ломается ли при этом соответствие определению полиморфизма? Ответ: полиморфизм существует на уровне языка, и если в языке перегрузки с одинаковыми названиями, но разными типами, считаются одной и той же функцией, то определение соблюдено и всё ок.

Уровнями ниже, конечно, разный код размещается в разных местах и реализация как-то должна направлять в разные места, технически обращаясь с переданными значениями по-разному. Но вы с этими уровнями напрямую уже не работаете, полиморфизм там если и есть (что вряд ли) то не совсем (или совсем не?) тот, которым вы пользуетесь.

В ООП же под полиморфизмом обычно понимают гораздо более узкое понятие: возможность вызывать один и тот же метод у любого объекта заданного класса/интерфейса или любого его подкласса/реализации.

К этому полиморфизму перегрузка действительно не имеет отношения