当超类方法在覆盖它时引发异常时,您需要遵循某些规则。
子类方法应该抛出Same异常,或者子类型-
它不应该抛出超级类型的异常-
您可以将方法保留在子类中而不会引发任何异常
根据第三条规则,如果超类方法引发某些异常,则可以覆盖它而不会引发任何异常。
在下面的示例中,超类的sampleMethod()方法引发FileNotFoundException异常,而sampleMethod()方法根本不引发任何异常。该程序仍然可以编译并执行,没有任何错误。
import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Scanner; abstract class Super{ public void sampleMethod()throws FileNotFoundException{ System.out.println("Method of superclass"); } } public class ExceptionsExample extends Super{ public void sampleMethod() { System.out.println("Method of Subclass"); } public static void main(String args[]) { ExceptionsExample obj = new ExceptionsExample(); obj.sampleMethod(); } }
输出结果
Method of Subclass
问题内容: 我们可以重载Java中的方法吗? 问题答案: 您 可以 重载该方法,但仅在JVM启动您的类时使用。例如: 从命令行运行时,即使指定一个或两个命令行参数,该命令也 始终会 打印。 当然,您可以从代码中自己调用该方法-此时将应用常规的重载规则。 编辑:请注意,您可以使用varargs签名,因为从JVM的角度来看,这是等效的:
问题内容: 我遇到了必须重写Object的toString()方法的问题,但是原始方法没有引发任何异常。但是,我正在使用一些需要抛出异常的通用代码。 这是FavoriteList.java的一部分。这些异常必须抛出。如果有某种方法可以抑制这些异常或将它们捕获到方法中,那将很有帮助。 最后,我的方法标题必须如下所示: 我不在乎方法的结尾内容。只要编译就可以了。我只需要修复标题,但是找不到解决方法。提
问题内容: 我在扩展基类并覆盖基类中的方法。但是当我称它为超类版本时。如何覆盖该方法? 我希望它打印“这是:孩子”,但它打印“这是:超级” 问题答案: 我找到了答案(从这里改编:https : //gist.github.com/Zodiase/af44115098b20d69c531)-基类也需要以ES6方式定义:
我想知道: 为什么在Java中不能重写静态方法? 静态方法可以在Java中重载吗?
假设我有一个类和一个方法 现在,我想为由流传递的的每个实例调用foo,如下所示: 问题:如何正确处理异常?代码在我的机器上没有编译,因为我没有处理foo()可能引发的异常。的在这里似乎没有用。这是为什么?
Java代码: 我的问题是:类中的是否重载了超类中同名的? 我的朋友说他们不是因为他们不在一个班。