0

私のマスタークラスがチェックされた例外をスローするとき、オーバーライドメソッドもチェックされた例外を実装するべきではありませんか??

class Master{
    String doFileStuff() throws FileNotFoundException{
        return "a";
    }
}

public class test extends Master{

    public static void main(String[] args){
    }


    String doFileStuff(){
        return "a";
    }

}   
4

5 に答える 5

0

サブクラスではオプションです。以下のリンクを確認してください。

http://www.tutorialspoint.com/java/java_overriding.htm

于 2013-10-07T07:16:24.853 に答える
0

オーバーライド メソッドは、同じコントラクトを保持する必要があります。

FileNotFoundException基本的には、またはサブクラスのリストをスローできることを意味しますがFileNotFoundException、そうする必要はありません。

この例を確認してください:

Master a = new test();
a.doFileStuff(); //this line might throw an exception, and you should catch it.
                 //but it is not illegal for test class not to throw an exception

これで、 のサブクラスで同じことを行うことができ、 とはFileNotFoundException異なる他の例外を使用して同じことを行うことができますFileNotFoundException。この後者のケースではdoFileStuff、クラス内のメソッドがtestではない別のチェック済み例外をスローすることは違法であるため、コードがコンパイルされないことがわかりますFileNotFoundException

于 2013-10-04T21:02:39.797 に答える
0

メソッドをオーバーライドする場合、すべての例外または例外のサブセットを宣言するか、スーパー クラス メソッドによってスローされる例外をまったく宣言しないことができます。スーパー クラス メソッドによって宣言された例外のサブクラスである例外を宣言することもできます。

スーパー クラス メソッドによって宣言された例外のサブクラスでない限り、スーパー クラス メソッドによって宣言されていない例外をスローすることはできません。

于 2013-10-04T21:03:27.490 に答える
0

そうではなく、Admit のコメントの理由をコードで表示するだけです。

実際に例外を取得するリスクがある場合、例外がスローされる可能性があります。コードのどこかにthrow new FileNotFoundException();try catch を追加するか、例外をスローする必要がある場合です。ただし、上書きする場合は脅威を削除できます。新しいリスクを追加する場合は、新しい方法でそれらを処理する必要があります。

import java.io.FileNotFoundException;

class Master {
  String doFileStuff() throws FileNotFoundException {
    throw new FileNotFoundException(); // it always throws an exception.
  }
}

public class Test extends Master {

  public static void main(String[] args) {
    String a = new Test().doFileStuff();
    String b = new Master().doFileStuff();
  }

  String doFileStuff() {
    return "a"; //It always returns a. No risks here.
  }

}
于 2013-10-04T21:04:56.497 に答える