本帖最后由 柴乔军 于 2013-1-20 17:37 编辑  
- class MyException extends Exception {
 
 -         
 
 - }
 
  
- class A {
 
 -         
 
 -         public void a() throws MyException {
 
 -                 throw new MyException();
 
 -         }
 
 - }
 
  
- class B extends A {
 
 -         
 
 -         public void a() {
 
 -                 System.out.println("没有抛出异常");
 
 -         }
 
 - }
 
  
- public class Test {
 
  
-         public static void main(String[] args) {
 
 -                 
 
 -                 A a = new B();
 
 -                 try {
 
 -                         a.a();
 
 -                 } catch (MyException e) {
 
 -                         //必须捕获
 
 -                            System.out.println("执行了A中的方法");
 
 -                 }
 
 -                 
 
 -                 B b = new B();
 
 -                 b.a(); //这里不需要捕获
 
 -         }
 
 - }
 
  复制代码 结果:没有抛出异常 
没有抛出异常 
 
两次调用,执行的都是 B类中重写后的方法,这里用a.a()调用要catch的原因,应该是编译器此时并不知道B类中是否重写了该方法, 
如果没有重写则需要执行A中的方法,所以要求catch,当直接声明1个B对象时,就不需要catch了,个人理解 |