[英]Overriding method with checked exceptions
我有两个类,即A和B,其中B扩展了A。我遇到了一个问题,即B引入了附加的功能,该异常带有异常ExceptionC
,该异常不适用于A的任何形式或形式,但不会t编译,除非A指定throws ExceptionC
。 我了解这是设计使然(由于Liskov替换原理)。 我的问题是双重的:
具体情况:
我正在用Java编写Ultimate Tic-Tac-Toe的实现。 基本上采用井字游戏网格,并用井字游戏网格填充它,如下所示:
| | # | | # | |
| | # | | # | |
| | # | | # | |
#################
| | # | | # | |
| | # | | # | |
| | # | | # | |
#################
| | # | | # | |
| | # | | # | |
| | # | | # | |
您从中心开始,并且X进入该网格的任何位置,O进入与较大的网格相对应的网格,因此在两次移动之后,它看起来可能像这样:
| |O# | | # | |
| | # | | # | |
| | # | | # | |
#################
| | #X| | # | |
| | # | | # | |
| | # | | # | |
#################
| | # | | # | |
| | # | | # | |
| | # | | # | |
如果目标网格已满或已经赢得,下一个人可以选择要进入的网格。
我有两个普通类,两个异常类和一个接口。
请注意,在标准井字游戏中,只有一块板子,因此TargetBoardFullException完全不适用。
我做错了吗? 我是否应该为此使用例外?
以下代码显示了Java不允许更改合同的原因:
class A {
public void method() {
// do something
}
}
class B extends A {
public void method() throws IOException { // <- compile error here
// do something and throw and exception
}
}
class App {
public static void main(String[] args) {
A a = new B();
a.method(); // to try or not to try, that's the question now.
}
}
当然,它不会编译。 但是如果可以,是否必须在main方法中捕获IOException(因为它是一个B
实例)(不是因为我们在接口上调用该方法)?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.