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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 渴望学习 中级黑马   /  2014-7-21 17:48  /  1224 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如果父类抛出了多个异常,那么子类在覆盖时只能抛出父类异常的子集。
子集指的是什么?  是不是每个异常的子类

5 个回复

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

如下面的代码:
  1. class AException extends Exception{

  2. }
  3. class BException extends AException{

  4. }
  5. class CException extends Exception{

  6. }
  7. class DException extends CException{

  8. }
  9. class EException extends Exception{

  10. }
  11. class Fu{
  12. public void show()throws AException,CException{}
  13. }
  14. class Zi extends Fu{
  15. /*子类可以抛出AException或者BException,DException,如果AException有其他的子类那么
  16. 不能抛出EException,也就是说父类抛出的异常或者该异常的子类都可以,父类有多个异常,子类可以抛出
  17. 那些异常的子类,就是子集*/
  18. public void show()throws AException,BException,DException{}
  19. }
  20. public class ExceptionDemo {

  21. public static void main(String[] args) throws Exception{


  22. }

  23. }
复制代码




回复 使用道具 举报
子类只能抛出父类异常或者异常的子集。如果父类没有抛,那子类绝对不能抛,只能catch。
还有,异常的catch顺序。一个异常的子类异常要catch在前面,该异常在catch在后面。就像RuntimeException的catch要在Exception的catch前面,否则会编译失败。
回复 使用道具 举报
燿陚√揚葳 发表于 2014-7-21 18:15
是的,可以抛出该异常的子类
异常在子父类覆盖中的体现
1.子类在覆盖父类时,如果父类的方法抛出异常,那么 ...

感谢!!!!!
回复 使用道具 举报
意思就是假如父类抛了10个异常,那么子类出现异常,只能抛这10个异常中的异常,不能抛这10个之外的了
回复 使用道具 举报
异常啊,还得回去补补
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马