我试图了解对象转换和方法覆盖。
我有一段代码:
public class ExceptionClass{
void m() throws SQLException{}
}
class A extends ExceptionClass{
void m() throws Exception{}
}
这会给出错误“异常异常与 ExceptionClass.m() 中的 throws 子句不兼容”。
如果我写为:
public class ExceptionClass{
void m() throws SQLException{}
}
class A extends ExceptionClass{
void m() throws RuntimeException{}
}
这不会给出任何错误,并且方法也被正确覆盖。经过一些分析,我认为可能是因为 SQLException 从 Exception 类扩展,因此我们不能在子类中用“Exception”替换“SQLException”(我们正在更改覆盖方法的签名)。
但后来我这样做了:
public class ExceptionClass{
void m() throws NullPointerException{}
}
class A extends ExceptionClass{
void m() throws RuntimeException{}
}
但是这里没有错误..!由于我上面提到的原因,我认为它应该给出相同的错误。
我不确定它为什么会这样。当我们重写方法时要遵循什么规则,这会在方法签名中抛出异常。