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?