本帖最后由 王杰 于 2012-3-11 09:25 编辑
如果子类中显示的抛出了父类没有或者大于父类的异常。编译会失败。
但是如果你的子类中抛出的是RuntimeException,那么编译是可以通过的,但是运行就会出问题。
试想一下,我们现在有两个类A和B,其中B继承A,A中有一个M方法抛出一个自定义的异常AECxception,AException继承Exception。B对A中的M方法进行覆盖,他抛出了一个Exception异常。
这样问题就来了。
如果在一个程序中,我们将A对象作为一个参数传入某函数中,并在函数中调用A的M方法,同时我们要对M方法进行try{ A.M(); }catch( AException e ){ e.printStackTrace(); } 的处理。
但是根据多态。我们可以把B对象也传入这个函数。这时候出问题了。如果我们传入的是B对象,那么他的异常将无法捕获。因为B的异常比A的异常大!
如果子类中产生了其他的异常。一般情况下,我们只能try不能抛。就是在子类中将问题解决了。
但是,如果子类中产生的是RuntimeException,我们可以抛出,并且不用在函数处声明。 |