我将尝试理解对象转换和方法重写。
这是一段代码:
public class ExceptionClass{
void m() throws SQLException{}
}
class A extends ExceptionClass{
void m() throws Exception{}
}
这会出现错误信息:“在 ExceptionClass.m() 中,异常不兼容于 throws 子句中的 Exception 异常”。
如果按照以下方式写:
public class ExceptionClass{
void m() throws SQLException{}
}
class A extends ExceptionClass{
void m() throws RuntimeException{}
}
这段代码没有任何错误,并且方法已经正确地被覆盖了。
经过一些分析,我认为可能是因为SQLException类继承自Exception类,因此在子类中不能将"SQLException"替换为"Exception"(我们正在改变重写方法的签名)。
但是,然后我做了这个:
public class ExceptionClass{
void m() throws NullPointerException{}
}
class A extends ExceptionClass{
void m() throws RuntimeException{}
}
但是这里没有错误...!我以为会因为我上面提到的原因而产生相同的错误。
我不确定它为什么会表现出这种方式。 此外,当我们重写方法并在方法签名中抛出异常时,应该遵循什么规则。