thinking in java中关于异常的一点疑问

liangwenli2 2018-11-25 09:09:51
如果类A在扩展类B的同时又实现了接口C,且B与C有相同方法event,但各自抛出不同的异常,那么接口的event()方法就不能改变在基类中的event()方法的异常接口。否则的话,使用基类的时候就不能判断是否捕获了正确的异常。这段话怎么理解?
接口:Storm .基类:Inning 以及子类 StormInning,如下,对于StormInning的event方法,抛出RainedOut和BaseException都会报错。
interface Storm{
public void event() throws RainedOut;
}
class Inning{
public void event() throws BaseException;
}
class StormInning extends Inning implements RainedOut{
public void event() /*throws RainedOut*/{
}
}
...全文
217 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangwenli2 2018-12-06
  • 打赏
  • 举报
回复
引用 5 楼 qq_39936465 的回复:
你可以认为接口是另一种形式的父类,子类怎么可以限制父类
我晓得子类不能限制父类,而且接口也可以理解为一个父类,但好奇书里面只强调接口对父类异常说明的限制,而没有说父类对接口的限制。罢了,不纠结了,谢谢
qq_39936465 2018-12-06
  • 打赏
  • 举报
回复
你可以认为接口是另一种形式的父类,子类怎么可以限制父类
qq_39936465 2018-12-06
  • 打赏
  • 举报
回复
引用 3 楼 liangwenli2 的回复:
您的意思是接口和基类中方法的异常说明都对派生类或者实现类的方法异常说明有闲置作用,但书里为什么独独说了接口对于基类的限制,而没谈基类对接口的限制,我的疑问在这里


我是这样理解的,父类的方法子类不一定需要重写,因为父类和接口都有同名方法,继承了父类的方法后子类可以不重写该接口方法,这时候就算要重写会被认为重写的是接口的方法。
liangwenli2 2018-12-06
  • 打赏
  • 举报
回复
引用 2 楼 qq_39936465 的回复:
这个很好理解,本来有2个不同异常,如果你子类中重写event()不管取其中那个异常,不就变只能判断其中一个异常了,而另一个异常无法判断了么?

子类继承的异常只能是父类的异常或其子异常,所以要么写双方异常的交集,要么不写。
您的意思是接口和基类中方法的异常说明都对派生类或者实现类的方法异常说明有闲置作用,但书里为什么独独说了接口对于基类的限制,而没谈基类对接口的限制,我的疑问在这里
qq_39936465 2018-12-06
  • 打赏
  • 举报
回复
因为接口本身是抽象类,方法为空,你要说的限制也无从说起,这种限制只能体现在子类的实现方法上。而父类是可以有实现方法的。
qq_39936465 2018-11-26
  • 打赏
  • 举报
回复
这个很好理解,本来有2个不同异常,如果你子类中重写event()不管取其中那个异常,不就变只能判断其中一个异常了,而另一个异常无法判断了么?

子类继承的异常只能是父类的异常或其子异常,所以要么写双方异常的交集,要么不写。
nayi_224 2018-11-26
  • 打赏
  • 举报
回复
书里就喜欢搞这些看似严谨,实则坑爹的东西,你只要记住两点。 接口中定义的异常就是个摆设,实际生效的是你具体实现类中声明的异常。 接口中定义的异常对其实现类具有约束作用,使其不能超过自己的范围(比如接口NullPointerException,实现类Exception就会报错),或者干脆不定义异常也是可以的。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧