Diferença de assinatura ao ocultar o método estático em uma subclasse

Recentemente eu estava brincando com um código Java simples usandomain métodos para testar rapidamente o código que escrevi. Acabei em uma situação em que eu tinha duas classes semelhantes a essas:

public class A {
    public static void main(String[] args) {
        // code here
    }
}



public class B extends A {
    public static void main(String[] args) throws IOException {
        // code here
    }
}

Fiquei surpreso ao saber que o código parou de ser compilado e o Eclipse reclamou queException IOException is not compatible with throws clause in A.main(String[]).

Bem, ambos os métodos são estáticos e osmain função emB está apenas escondendo aqueleA, então pensei que não havia nenhuma relação entre eles. Nos métodos estáticos, não temos polimorfismo e a chamada é vinculada à implementação do método concreto durante a compilação, portanto, não consigo entender por quemain noB não pode lançar exceção que não é declarada emmain assinatura emA.

Por que os designers de Java decidiram impor uma restrição como essa e em que situações isso causaria problemas se a restrição não fosse imposta pelo compilador?