Polimorfismo y sobrecarga de métodos

Tengo una pregunta rápida y directa:

Tengo esta clase simple:

public class A
{
    public void m(Object o)
    {
      System.out.println("m with Object called");
    }

    public void m(Number n)
    {
       System.out.println("m with Number called");
    }
    public static void main(String[] args)
    {
       A a = new A();
       // why will m(Number) be called?
       a.m(null);
    }
}

ACTUALIZACIÓN: en realidad es un método con Número en realidad llamado. Perdón por la confusión.

Si llamo a.m (nulo), llama al método con el parámetro Number.

Mi pregunta es: ¿por qué es esto? ¿En qué parte de la especificación del lenguaje Java se especifica esto?

Respuestas a la pregunta(5)

Su respuesta a la pregunta