方法覆盖(Override)中的一些问题 1

解释一:

A a = new B();
a.test();

编译时调用 类A 中test(),抛出异常,
实际调用的是 类B 中的 test(),
如果类B中的 方法抛出了 更大的异常,这样就无法捕获了。

解释二:

接口定义的是某种规范或约束,相当于签了合同,具体事情怎么做不管,但不能违反法律和合同条款。

接口的实现类的可见性,异常等范围都要小于等于接口就是一个接口的“法律”,或者说约束条件。
如果没有这个约束,程序将不可预见和控制。
主要是两点原因,1.面向接口编程时,是不考虑具体实现类的(可能有很多实现,在处理业务逻辑时才去实现)
2.从异常的捕获方式来说,try{}catch(SQLException e){}可以捕获到指定的异常及其子异常。
因此,如存在接口A的方法am1抛出SQL异常,对于面向接口的编程来说,此类异常是可预见的,可以定制一些对应的异常捕获和处理方式。
如果一个实现类抛出SQL异常,或者SQL异常的子异常(如BatchUpdateException),那就是可以预期的,可以捕获并处理。
但如果实现类抛出的是IOException,不在SQLExcepton的范围,你无法预知,所以也是无法处理的。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值