黑马程序员技术交流社区

标题: 异常 子类复写父类异常方法 [打印本页]

作者: 余善航    时间: 2013-1-20 17:19
标题: 异常 子类复写父类异常方法
父类的方法a上声明了异常,子类复写该方法a没有抛出异常
,那么创建个子类对象, 子类对象调用该方法a ,需要处理异常吗? 为什么啊

作者: 柴乔军    时间: 2013-1-20 17:33
本帖最后由 柴乔军 于 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了,个人理解
作者: 柴乔军    时间: 2013-1-20 18:36
上面的代码好像有些问题。。。。B中的方法和A中的方法不是完全一样,但是加了@Override,编译器也没有报错。。这样不知道到底算不算重写了。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2