是否有可能破坏规则:如果超类方法声明了异常,那么子类重写方法不能声明父异常?

时间:2017-02-06 14:18:12

标签: java exception override

因此,当我们谈论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{}
}

我明白我打破了一个例外覆盖规则,但有可能实现这个目的,或者我的工作完全错了吗?

1 个答案:

答案 0 :(得分:2)

  

是否有可能实现这一目的

这是可能的,但这是一个黑客,可能会造成混乱。我强烈建议你把它作为设计原则来避免。

  

或者我完全错了?

一旦你确定了超类中的方法可以抛出哪些检查异常,子类应该遵守这一点而不是抛出一个不同的已检查异常,或者任何调用子类方法的人都会受到冲击。