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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余善航 中级黑马   /  2013-1-20 17:19  /  1281 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

父类的方法a上声明了异常,子类复写该方法a没有抛出异常
,那么创建个子类对象, 子类对象调用该方法a ,需要处理异常吗? 为什么啊

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 柴乔军 于 2013-1-20 17:37 编辑
  1. class MyException extends Exception {
  2.         
  3. }

  4. class A {
  5.         
  6.         public void a() throws MyException {
  7.                 throw new MyException();
  8.         }
  9. }

  10. class B extends A {
  11.         
  12.         public void a() {
  13.                 System.out.println("没有抛出异常");
  14.         }
  15. }

  16. public class Test {

  17.         public static void main(String[] args) {
  18.                
  19.                 A a = new B();
  20.                 try {
  21.                         a.a();
  22.                 } catch (MyException e) {
  23.                         //必须捕获
  24.                            System.out.println("执行了A中的方法");
  25.                 }
  26.                
  27.                 B b = new B();
  28.                 b.a(); //这里不需要捕获
  29.         }
  30. }
复制代码
结果:没有抛出异常
没有抛出异常

两次调用,执行的都是 B类中重写后的方法,这里用a.a()调用要catch的原因,应该是编译器此时并不知道B类中是否重写了该方法,
如果没有重写则需要执行A中的方法,所以要求catch,当直接声明1个B对象时,就不需要catch了,个人理解

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
上面的代码好像有些问题。。。。B中的方法和A中的方法不是完全一样,但是加了@Override,编译器也没有报错。。这样不知道到底算不算重写了。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马