在 Java 中,main()
方法的哪个声明是有效的?
我们常用public static void main(String[] arr){}
,但我想知道的是:main()
方法可以声明为final吗?
final public static void main(String[] arr) {
//...
}
最佳答案
是的,你可以标记main
final
。
虽然有可能,但它并没有真正的意义。 final
方法不能被覆盖。但是静态方法无论如何都不能,因为它们在扩展时不会被继承。
隐藏
但是,通过在扩展类中引入同名方法来实际隐藏时,它会产生效果。参见 Behaviour of final static method .
一个人为的例子:
public class A {
public static void main(String[] args) {
System.out.println("Hello from A");
}
}
public class B extends A {
public static void main(String[] args) {
System.out.println("Hello from B");
}
}
假设您手动调用这些方法:
A.main(null); // "Hello from A"
B.main(null); // "Hello from B"
请注意,Java 还允许从实例调用 static
方法:
A a = new A();
a.main(null); // "Hello from A"
B b = new B();
b.main(null); // "Hello from B"
但是,如果将 B
对象的 View 缩减为 A
对象会怎样:
A bAsA = new B();
bAsA.main(null); // "Hello from A"
这可能令人惊讶。因为,通常,它会从实际实例中获取方法,即 B
。但这仅适用于您实际覆盖方法的情况,而 static
方法绝不会出现这种情况。
将 main
标记为 final
将导致不再有子类能够隐藏您的方法。也就是说,B
将无法再声明方法 main
(具有相同的签名)。上面的代码将无法编译。
关于java - Java 的 main() 方法可以声明为 final 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54620109/