Adding final
to a static method can actually make a difference. Consider the following code:
class A {
public static void main(String[] args) {
System.out.println("A");
}
}
class B extends A {
public static void main(String[] args) {
System.out.println("B");
}
}
class C extends B {
}
public class Test {
public static void main(String[] args) {
C.main(args); // Will invoke B.main
}
}
Adding final
to A.main
would prevent accidental hiding of A.main
. In other words, adding final
to A.main
guarantees that B.main
is not allowed, and that C.main
therefore prints "A"
as opposed to for instance "B"
.
Why are we allowed to have a final main method in java?
Beside the above corner case, adding final
to a static method doesn't make much difference, so I don't see a big point in adding a rule for disallowing it.
More information available here: Behaviour of final static method
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…