Это зависит от того, какой язык вы используете, и как вы его используете.
Например, в Java разрешение перегрузки всегда выполняетсяво время компиляции разрешение переопределения выполняется во время выполнения.
В C # это все еще обычно true - но если вы используете динамическую типизацию C # 4, разрешение перегрузки выполняется вВремя выполнения тоже:
static void Foo(int y) {}
static void Foo(string y) {}
...
dynamic x = 10;
Foo(x); // Calls Foo(int)
x = "hello";
Foo(x); // Calls Foo(string)
Существует множество других языков, которые также ведут себя динамически.Поэтому вам действительно необходимо изучить поведение языка, который вы используете в данный момент.