JAvaメソッド書き換え時の異常制限

1333 ワード

1.子クラスは、親の例外宣言を持つメソッドを書き換えるときに、例外を投げ出さないか、親メソッドと同じ例外またはその例外の子クラスを投げ出す.2.子クラスは、親クラスの例外宣言を持つメソッドを書き換えるとともに、同じメソッド名を持つインタフェースを実装し、そのインタフェースのメソッドにも例外宣言を持つ場合、子クラスの書き換えメソッドは、例外を投げ出さないか、親クラスのメソッド宣言がインタフェースのメソッド宣言の例外と交差することを宣言します.例は次のとおりです.
class Test
{
    public Test() throws IOException
    {}
    void test() throws IOException
    {}
}

interface I1{
    void test() throw Exception;
}

class SubTest extends Test implements I1
{
    public SubTest() throws Exception,NullPointerException, NoSuchMethodException
    {}
    void test() throws IOException
   {}
}

SubTestクラスでは、testメソッドは例外を放出しないか、IOExceptionまたはそのサブクラス、例えばInterruptedIOExceptionを放出します.どうしてこんなデザインなの?本人の理解では,親やインタフェースのタイプを子で置き換える場合,1)子のメソッドが異常を投げ出さない場合,元の親やインタフェースのメソッドに対する異常処理プログラムは機能しないが,元の場所に残しておくことができ,上品さを損なわない.2)サブクラスのメソッドが例外を放出する場合,放出される例外は親またはインタフェースで宣言された例外または異常のサブクラスのみであるため,従来の親またはインタフェースでのメソッドに対する例外ハンドラは依然として有用であり,異常ハンドラは異常のサブクラスを処理することができる.なぜなら、子は親であり、親は必ずしも子ではないからです.最後に、サブクラスコンストラクタはベースクラスコンストラクタから放出された例外をキャプチャすることはできません.ベースクラスコンストラクタから放出される例外またはその例外の親をサブクラスコンストラクタで宣言するしかありません.SubTestの非パラメトリックコンストラクタでは、IOExceptionまたはIOExceptionを放出する親を宣言する必要があります.さらに、SubTestの非パラメトリックコンストラクタは、Null PointerExceptionなどの他の異常を放出することを宣言することもできます.