Signaturunterschied beim Ausblenden der statischen Methode in einer Unterklasse

or kurzem habe ich mit etwas einfachem Java-Code herumgespielt, indem ich @ verwendet habmain Methoden, um den von mir geschriebenen Code schnell zu testen. Ich kam in eine Situation, in der ich zwei ähnliche Klassen hatte:

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

Ich war ziemlich überrascht, dass der Code nicht mehr kompiliert wurde und Eclipse sich beschwerte, dassException IOException is not compatible with throws clause in A.main(String[]).

Nun, beide Methoden sind statisch und dasmain Funktion inB versteckt nur die vonA, also dachte ich, dass es überhaupt keine Beziehung zwischen ihnen gibt. Bei statischen Methoden gibt es keinen Polymorphismus und der Aufruf ist an die konkrete Implementierung der Methode während der Kompilierung gebunden. Daher kann ich nicht verstehen, warummain imB kann keine Ausnahme auslösen, die nicht in @ deklariert imain Signatur inA.

Warum haben Java-Designer beschlossen, eine solche Einschränkung zu erzwingen, und in welchen Situationen würde dies Probleme verursachen, wenn die Einschränkung nicht vom Compiler erzwungen würde?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage