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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 郑彬 于 2012-8-15 22:43 编辑

异常在子父类覆盖中的体现:
1,子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常类的子类。
2,如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。
3,如果父类或接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。
        如果子类方法发生了异常。就必须要进行try处理。绝对不能抛。
以上3点如何解释,为什么?

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 新人鼓励!

查看全部评分

5 个回复

倒序浏览
子类要比父类更强大,extends,扩展的意思。
如果子类抛出更多的异常,表示子类变弱了!所以子类不能抛出比父类更多的异常。
怎样比较强大与弱小,要求异常具有可比性。所以子类只能抛出父类抛出的异常的子集。
回复 使用道具 举报
你可以从你说的第一条和第二条看出一个规则,子类必须比父类更优化,也就像生物进化一样,子类出现的问题不能比父类多就是,既然父类都没有出现异常,那么子类更不能出现异常了,所以只能try{}catch(){}进行处理了!
回复 使用道具 举报
强大不能解决问题啊.....不能说java就么规定的.....
比如
java有一个异常IOException是Excepion的子类
java还有一个父类是Father throws IOException,并且有一个test()方法
java还有Father的一个子类son 如果他无限制,throws Exception,同时重写test()方法
另一个A类:
Father f=new Father();
void app(f){
    try{f.test()}catch(IOExcption){}
}

当用A类时,传入一个子类对象
Son s=new Son();
A.app(s)就会出错,抓不住Exception

回复 使用道具 举报
本帖最后由 张忠豹 于 2012-8-15 18:47 编辑

1,子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常类的子类。
    只能抛出父类方法的异常,这个是理所当然的。为什么还能抛出子类方法的异常,这是将问题细化,得到更好的处理
比如:
try{
throw new NullPointerException();
//下面用Exception捕获是不会出问题的吧,但是你要是用catch(NullPointerException e){}来捕获的话,是不是更好一些!
}catch(Exception e){

}
2,如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。
   因为在子类覆盖的方法中可以用try{}catch(){}语句进行处理,处理之后这个异常就不存在了,所以就只能抛出子集了(子集是包括其自身的)
3,如果父类或接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常
  函数覆盖,讲究的就是函数的声明部分都要相同(访问权限只能上升),返回值类型、方法名称、参数顺序和类型都要保持一致。父类没有声明异常,子类当然不该有
回复 使用道具 举报
问题已经解决
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马