黑马程序员技术交流社区
标题:
异常在子父类中的体现
[打印本页]
作者:
→★稻草人☆
时间:
2014-2-15 16:45
标题:
异常在子父类中的体现
class AException extends Exception
{}
class BException extends AException
{}
class Fu
{
void show() throws AException
{}
}
class Zi extends Fu
{
void show() throws BException
{}
}
上面这个程序中,为什么子类覆盖了父类的方法时,抛出异常只能是AException或是BException?
如果B异常里面除了有A异常里面的方法还有自己的特有方法时,为什么A异常还能处理它,A异常不是只能执行子类中与自己共有的方法吗?
哪位大神帮忙分析一下,这个问题想了半天还是有点晕,主要是为什么Zi类中抛出B异常会没问题。
作者:
itpower
时间:
2014-2-15 16:50
异常在子父类覆盖中的体现:
1、子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类异常或者该异常的子类
2、如果父类方法抛出多个异常,那么子类再覆盖该方法时,只能抛出父类异常的子集
3、如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常
如果子类方法发生了异常,就必须要进行try处理,绝对不能抛
作者:
奋斗的小胖子
时间:
2014-2-15 17:40
这个其实很简单的,子类继承父类,如果父类没有抛异常,那子类出现异常只能处理不能抛出去。如果父类抛了异常,那么子类只能抛出跟父类同样抛出的异常。可以说抛出异常这个特征就好比你跟你父母在样子上有点相似
作者:
徐青松
时间:
2014-2-16 13:28
1楼的回答很全面系统,楼主的问题:为什么Zi类中抛出B异常会没问题。这是因为子类继承父类,能抛的异常只能是父类中的异常或者该异常的子类异常。A异常有子类B异常,所以Zi类能够抛出B异常。另一种情况则是若Fu类的show方法没异常可抛出,这是Zi类就不能抛出异常,只能try{}catch()处理异常。希望能帮到你
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2