【发布时间】:2015-08-10 22:10:25
【问题描述】:
最近我在玩一些简单的 Java 代码,使用 main 方法来快速测试我编写的代码。我最终遇到了两个类似的课程:
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
}
}
我很惊讶代码停止编译并且 Eclipse 抱怨Exception IOException is not compatible with throws clause in A.main(String[])。
嗯,这两种方法都是静态的,B 中的main 函数只是隐藏了A 中的一个,所以我认为它们之间完全没有关系。在静态方法中,我们没有多态性,并且在编译期间调用绑定到具体的方法实现,因此我无法理解为什么B 中的main 不能抛出main 签名中未声明的异常A。
为什么 Java 设计者决定强制执行这样的约束,如果编译器不强制执行约束,在什么情况下会导致问题?
【问题讨论】:
标签: java