Перегрузка в Java и множественная диспетчеризация

У меня есть коллекция (или список или список массивов), в который я хочу поместить как строковые значения, так и двойные значения. Я решил сделать это коллекцией объектов и использовать перегрузку полиморфизма OND, но я сделал что-то не так.

Я провожу небольшой тест:

public class OOP {
    void prova(Object o){
        System.out.println("object");
    }

    void prova(Integer i){
    System.out.println("integer");
    }

    void prova(String s){
        System.out.println("string");
    }

    void test(){
        Object o = new String("  ");
        this.prova(o); // Prints 'object'!!! Why?!?!?
    }

    public static void main(String[] args) {
        OOP oop = new OOP();
        oop.test(); // Prints 'object'!!! Why?!?!?
    }
}

В тесте кажется, что тип аргумента определяется во время компиляции, а не во время выполнения. Почему это?

Этот вопрос связан с:

Полиморфизм против переопределения против перегрузки
Попробуйте описать полиморфизм как можно проще

РЕДАКТИРОВАТЬ:

Хорошо, метод для вызова определяется во время компиляции. Есть ли обходной путь, чтобы избежать использованияinstanceof оператор?

Ответы на вопрос(6)

Ваш ответ на вопрос