Ответ 1
Различие, которое уместно здесь, не между скомпилированными и интерпретируемыми языками, а между статически типизированным (Java, С#) и динамически типизированным (Ruby, Python, Objective-C). На динамически типизированном языке информация о типе очень часто неизвестна до времени выполнения. Во время выполнения все объекты статически типизируются как id
в Objective-C.
Кроме того, основная идея в динамически типизированных языках OO состоит в том, что вам не важно, какой тип объекта является до тех пор, пока он отвечает на сообщения, которые вы хотите отправить. Поэтому перегрузка на основе типа будет лежать прямо перед лицом.