Exception在方法继承中的限制

问题:

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

首先定义异常和父类:

 class Exception1 extends Exception {}
class Exception2 extends Exception {}
class Exception3 extends Exception {}
class Exception1_1 extends Exception1 {}
class Exception2_1 extends Exception2 {}
class Exception3_1 extends Exception3 {}
class SuperClass {
public void method1() throws Exception1 , Exception2 , Exception3 {}
}

正确的方法覆盖:

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

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

上面三种都可以。

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

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

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

新的代码:

 class Exception4 extends Exception {}
class Exception5 extends Exception {} class SuperClass {
public void method1() throws Exception4{}
}
interface TestInterface {
public void method1() throws Exception5 ;
}

正确的覆盖:

 public class TestExceptionLimit extends SuperClass implements TestInterface {
@Override
public void method1(){}
}

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

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

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

上一篇:【视频编解码·学习笔记】6. H.264码流分析工程创建


下一篇:js 鼠标滚动到某屏时,加载那一屏的数据,仿京东首页楼层异步加载模式