Java 重写一个超类方法,该方法在子类中使用已检查的异常引发未检查的异常

Java 重写一个超类方法,该方法在子类中使用已检查的异常引发未检查的异常,java,Java,我们是否可以重写一个超类方法,该方法在子类中引发一个未检查的异常和一个已检查的异常?不,您不能 子类方法不能抛出基超类方法的throws子句未包含的任何选中异常 换句话说,子类方法只能在其出现在超类方法的throws子句中,或者它是出现在该throws子句中的异常的子类时,才会抛出选中的异常 这是有意义的,因为超类的用户只知道超类方法的约定,所以他们如何知道他们必须捕获超类的throws子句中未提及的一些额外异常?他们不能也不应该知道覆盖该方法的所有子类(其中一些可能尚未编写)。是什么阻止您自己

我们是否可以重写一个超类方法,该方法在子类中引发一个未检查的异常和一个已检查的异常?

不,您不能

子类方法不能抛出基超类方法的
throws
子句未包含的任何选中异常

换句话说,子类方法只能在其出现在超类方法的
throws
子句中,或者它是出现在该
throws
子句中的异常的子类时,才会抛出选中的异常


这是有意义的,因为超类的用户只知道超类方法的约定,所以他们如何知道他们必须捕获超类的
throws
子句中未提及的一些额外异常?他们不能也不应该知道覆盖该方法的所有子类(其中一些可能尚未编写)。

是什么阻止您自己制作示例和查看?:)假设您有类似于
void method(SuperType st){..st.foo();}
的方法,并将其传递给类的方法实例,该类重写
foo()
以抛出选中的异常。以前编写的代码是否安全?子类对象也是超类对象。因此,子类对象的任何位置都应该适合于预期超类类型对象的位置,没有任何编译异常。想象一下,通过重写一个方法从一个子类抛出一个已检查的异常,想象一下该方法的调用方会发生什么情况,这些调用方期望的对象类型是super-class。现在他们应该自动开始不编译还是什么?。当您将子类对象注入到这些预先存在的调用者时会发生什么?一旦你像这样思考,你就会自己得到答案。获得答案的理想方式是思考,如果这是允许的,会发生什么错误,如果这是允许的,会有任何歧义吗。一旦你的大脑思考并得到答案,那么你应该很兴奋地使用演示程序验证它,然后使用JLS文档验证它。这是最好的学习方法。限制规则不会有帮助,你会忘记的。谢谢!现在明白了。上面的第二个参考资料也有帮助。68,请阅读我对你的问题的评论,这将有助于你今后的学习。祝你一切顺利