cha*_*mba 11 java inheritance exception
假设我们有这个问题
public class Father{
public void method1(){...}
}
public class Child1 extends Father{
public void method1() throws Exception{
super.method1();
...
}
}
Run Code Online (Sandbox Code Playgroud)
Child1扩展Father和覆盖,method1但鉴于实现Child1.method1现在抛出异常.这不会编译,因为重写方法不能抛出新的异常.
什么是最好的解决方案?
Father.对我而言,这是针对封装,继承和一般OOP(Father可能引发永远不会发生的异常).RuntimeException代替?此解决方案不会传播Exception到Father,但Oracle文档和其他来源声明,当"客户端代码无法执行任何操作"时,应使用该类异常.这不是那种情况,这个例外对于恢复blablabla很有用(为什么使用它是错误的RuntimeException?).使用 RTE 并不是一个坏主意。这就是Spring框架的方法论,并且效果很好。如果您正在实施应用程序,可能会使用此解决方案。
但是,如果您正在实现公开 API 的库,恕我直言,您应该使用检查异常。在这种情况下,您应该创建自己的异常,例如BaseException。方法method()将Father抛出它。定义ChildException extends BaseException并声明method1()子类以抛出它。
这不会破坏封装:基类抛出基本异常。它不知道具体的例外情况。子类抛出具体异常,但它扩展了基本异常,因此可以被客户端代码视为基本异常。
作为一个例子,我可以给你一个例子IOException,FileNotFoundException这可以扩展它。您可以IOException在具体流FileInputStream抛出时使用输入流捕获FileNotFoundException。但客户并不知道这一点。它抓住了IOException。
| 归档时间: |
|
| 查看次数: |
5899 次 |
| 最近记录: |