Я знаю лишь перегрузку операторов/методов, методы расширения, полиморфизм подтипов. Но я не понимаю к каким типом они относиться, и какие типы есть. Слышел лишь он ad hoc полиморфизме. Если я не ошибаюсь есть еще 2 типа.
ad-hoc - это как раз перегрузка методов.
Методы расширения - это вообще не полиморфизм.
Полиморфизм подтипов - это обычный полиморфизм с наследованием и реализацией интерфейсов.
Есть ещё параметрический полиморфизм - это когда у тебя женерики используются.
Возьмём пример из Haskell
1) параметрический:
функция length подсчитает длину списка любого типа элементов
2) специальный (ad hoc):
при вызове функции сложения (+) под капотом вызываются разные команды процессора - для целых и дробных форматов.
при вызове функции сложения (+) под капотом вызываются разные команды процессора - для целых и дробных форматов.
Вопрос был задан в теге ООП, а значит нужно отвечать в контексте ООП, а не машинного кода.
ad-hoc полиморфизм, например в C++, обычно реализуется компилятором на основе шаблонов, ADL (выбор функции по типам параметров), манглирования имен.
Студенту, может, и нужно отвечать, но мы то с вами не на экзамене. Для функционального программирования вообще нет железа, так уж получилось, что ФП-шники берут процессоры архитектуры фон Неймана с ячейками памяти, предназначенные для хранения переменных (не знаю, в курсе вы или нет, но в ФП переменных нет, одни функции).