A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© →★稻草人☆ 中级黑马   /  2014-2-15 16:45  /  1140 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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异常会没问题。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

3 个回复

倒序浏览
异常在子父类覆盖中的体现:
1、子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类异常或者该异常的子类
2、如果父类方法抛出多个异常,那么子类再覆盖该方法时,只能抛出父类异常的子集
3、如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常
如果子类方法发生了异常,就必须要进行try处理,绝对不能抛

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
这个其实很简单的,子类继承父类,如果父类没有抛异常,那子类出现异常只能处理不能抛出去。如果父类抛了异常,那么子类只能抛出跟父类同样抛出的异常。可以说抛出异常这个特征就好比你跟你父母在样子上有点相似
回复 使用道具 举报
1楼的回答很全面系统,楼主的问题:为什么Zi类中抛出B异常会没问题。这是因为子类继承父类,能抛的异常只能是父类中的异常或者该异常的子类异常。A异常有子类B异常,所以Zi类能够抛出B异常。另一种情况则是若Fu类的show方法没异常可抛出,这是Zi类就不能抛出异常,只能try{}catch()处理异常。希望能帮到你
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马