zoukankan      html  css  js  c++  java
  • Exception在方法继承中的限制

    问题:

    父类或接口中定义了方法应该抛出的异常,那么当子类重写方法时应该怎样定义将要抛出的异常:

    首先定义异常和父类:

    1 class Exception1 extends Exception {}
    2 class Exception2 extends Exception {}
    3 class Exception3 extends Exception {}
    4 class Exception1_1 extends Exception1 {}
    5 class Exception2_1 extends Exception2 {}
    6 class Exception3_1 extends Exception3 {}
    7 class SuperClass {
    8     public void method1() throws Exception1 , Exception2 , Exception3 {}
    9 }

    正确的方法覆盖:

    1. 子类方法只能抛出父类异常的子集合:

    1 public class TestExceptionLimit extends SuperClass {
    2     @Override
    3     public void method1() {}
    4 }
    public class TestExceptionLimit extends SuperClass {
        @Override
        public void method1() throws Exception1 {}
    }
    1 public class TestExceptionLimit extends SuperClass {
    2     @Override
    3     public void method1() throws Exception1 , Exception2 , Exception3 {}
    4 }

    上面三种都可以。

    2. 子类可以抛出父类异常的导出类:

    1 public class TestExceptionLimit extends SuperClass {
    2     @Override
    3     public void method1() throws Exception1_1 , Exception2_1 {}
    4 }

    3. 还有一种特殊的情形,当子类同时继承一个父类和实现一个接口,而且这个父类和接口同时定义了签名一样的方法,但是抛出异常不一样,那么子类应该怎样定义自己的方法异常:

    新的代码:

    1 class Exception4 extends Exception {}
    2 class Exception5 extends Exception {}
    3 
    4 class SuperClass {
    5     public void method1() throws Exception4{}
    6 }
    7 interface TestInterface {
    8     public void method1() throws Exception5 ;
    9 }

    正确的覆盖:

    1 public class TestExceptionLimit extends SuperClass implements TestInterface {
    2     @Override
    3     public void method1(){}
    4 }

    注意:不要抛出任何异常,下面可以证明:

    1 public class TestExceptionLimit extends SuperClass implements TestInterface {
    2     @Override
    3     public void method1() throws Exception4 {}
    4 }

    这段代码编码会出错,错误信息为:Exception Exception4 is not compatible with throws clause in TestInterface.method1()。表示和接口定义的异常不匹配,如果你尝试抛出Exception5它又会告诉你和父类定义的异常不匹配,所以不写还不行嘛--!,Java设计者们还是挺人性化的~~~

  • 相关阅读:
    在实践中不断总结和提升
    [转]态度的魔力 Net
    回答的智慧 Net
    [转] 【领导必读】唐僧为什么可以领导孙悟空 Net
    [转载]人生感悟:8个笑话 8味人生 Net
    人生成功的十大说话技巧 Net
    最新人生感悟语句摘选 Net
    2012注定是收获的一年,奋斗才刚刚开始
    程序员职业发展的绊脚石思想的枷锁
    AgileEAS.NET5.0界面设计器使用说明书(上)
  • 原文地址:https://www.cnblogs.com/caiyao/p/4736973.html
Copyright © 2011-2022 走看看