ИМО, основное преимущество - это согласованность в именовании методов / функций, которые логически выполняют очень похожие задачи и немного различаются при принятии разных параметров.Это позволяет повторно использовать одно и то же имя метода в нескольких реализациях.
Например, перегрузки: (Хорошие)
function Person[] FindPersons(string nameOfPerson) { ... }
function Person[] FindPersons(date dateOfBirth) { ... }
function Person[] FindPersons(int age, string dogsName) { ... }
Предпочтительнее функций с уникальными именами: (Хуже)
function Person[] FindPersonsByName(string nameOfPerson) { ... }
function Person[] FindPersonsByDOB(date dateOfBirth) { ... }
function Person[] FindPersonsByAgeAndDogsName(int age, string dogsName) { ... }
Таким образом, кодер, пишущий клиент, который вызывает / использует эти функции, может работать на более высоком уровне концептуального мышления («Мне нужно найти человека») и ему не нужно запоминать / находить надуманную функциюname.
При статической типизации компилятор будет оставлен в соответствии с применимой перегрузкой на основе параметров использования.Для динамической типизации такое же совпадение будет происходить во время выполнения, что может привести к сбою, если не найдено подходящего совпадения.