Envio de método Java com argumento nulo

Por que (aparentemente) faz diferença se eu passonull como argumento diretamente ou passe umObject que eu atribuí ovalor null?

Object testVal = null;
test.foo(testVal);    // dispatched to foo(Object)
// test.foo(null);    // compilation problem -> "The method foo(String) is ambiguous"   

public void foo(String arg) { // More-specific
    System.out.println("foo(String)");
}

public void foo(Object arg) { // Generic
    System.out.println("foo(Object)");
}

Em outras palavras, por que a segunda chamada (comentada) parafoo(...) não enviado parafoo(Object)?

Atualizar: Eu uso o Java 1.6. Eu poderia compilar o código de Hemal sem problemas, mas o meu ainda não é compilado. A única diferença que vejo é que os métodos de Hemal são estáticos enquanto os meus não são. Mas eu realmente não vejo por que isso deve fazer a diferença ...?

Atualização 2: Resolvido. Eu tinha outro método foo (Runnable) na minha classe, então o despachante não pôde selecionar sem ambiguidade o método mais específico. (Veja meu comentário na segunda resposta de Hemal.) Obrigado a todos pela ajuda.

questionAnswers(4)

yourAnswerToTheQuestion