本帖最后由 柴乔军 于 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了,个人理解 |