因此,当我们谈论java异常规则时,我完全理解规则:
如果超类方法声明了异常,则子类重写方法不能声明父异常(对于已检查的异常)
但我有以下问题:
public class BaseException extends Exception
{
public BaseException(String s)
{
super(s);
}
}
public class ClassExtendsExceptionChildOne extends BaseException
{
public ClassExtendsExceptionChildOne(String s)
{
super(s);
}
}
我必须使用上述自定义异常来在这两个类中实现以下结果:
public abstract class MyClass
{
public abstract void abstractMethod2() throws ClassExtendsExceptionChildOne;
}
public class ChildClassOne extends MyClass
{
@Override
public void abstractMethod2() throws BaseException{}
}
我明白我打破了一个例外覆盖规则,但有可能实现这个目的,或者我的工作完全错了吗?
答案 0 :(得分:2)
是否有可能实现这一目的
这是可能的,但这是一个黑客,可能会造成混乱。我强烈建议你把它作为设计原则来避免。
或者我完全错了?
一旦你确定了超类中的方法可以抛出哪些检查异常,子类应该遵守这一点而不是抛出一个不同的已检查异常,或者任何调用子类方法的人都会受到冲击。