Diferencia de firma al ocultar el método estático en una subclase

Recientemente estaba jugando con un código Java simple usandomain métodos para probar rápidamente el código que escribí. Terminé en una situación en la que tenía dos clases similares a esas:

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
    }
}

Me sorprendió bastante que el código dejara de compilarse y Eclipse se quejó de queException IOException is not compatible with throws clause in A.main(String[]).

Bueno, ambos métodos son estáticos y elmain funcionar enB solo está ocultando el deA, así que pensé que no había ninguna relación entre ellos. En los métodos estáticos no tenemos polimorfismo y la llamada está vinculada a la implementación del método concreto durante la compilación, por lo tanto, no puedo entender por quémain enB no puede lanzar una excepción que no esté declarada enmain firma enA.

¿Por qué los diseñadores de Java decidieron aplicar una restricción como esta y en qué situaciones causaría problemas si el compilador no aplicara la restricción?

Respuestas a la pregunta(4)

Su respuesta a la pregunta