[英]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.