4

私が再試験のために読んでいる論文で、「ブロックをポリモーフィックにキャッチできますか?」と尋ねられました。

catchもしそうなら、複数のブロックをポリモーフィックと呼んでも意味がありません。catchブロックに名前を付けることができず、メソッドヘッダーにパラメーターしか含まれていない場合、それはポリモーフィズムですか?

例えば:

try {

//...

} catch (FileNotFoundException e) {
    System.err.println("FileNotFoundException: " + e.getMessage());
    throw new SampleException(e);

} catch (IOException e) {
    System.err.println("Caught IOException: " + e.getMessage());
}

この中で、これら 2 つのcatchブロックはポリモーフィックですか?

4

4 に答える 4

3

投稿した例は、オーバーロードとして説明する必要があります。オーバーロードとの唯一の違いは、サブクラスがそのスーパークラスの前に現れる という読みやすさの要件です。

「ポリモーフィック キャッチ ブロック」というステートメントを解析するには、少し体操が必要です。

上記の体操を完了した後、私はそれを次のように解釈します

  • キャッチされるオブジェクトのタイプに応じて異なる実装を提供する catch ブロック。

に似たもの

try{


} catchwith ( catchHandlerObject );

そして catchHandlerObject はポリモーフィックです。つまり、catchHandlerObject の (ランタイム) タイプに応じて、同じ例外を異なる方法で処理します。

class C{
   public void m(Object o){ .... };
}

m(Object o)ポリモーフィックですか?コンセンサスは、この説明にポリモーフィズムを含める必要はないということです。コールm( stringObject )。ポリモーフィズムを示すものではありません。

私は以前のポスターに反対し、ノーと言います。ポリモーフィックは、この状況にラベルを付ける適切な方法ではありません。ポリモーフィズムは、何が起こっているかを説明する適切な方法ではありません。

また、TAまたは教授にこれを再確認する必要があると本当に思います。スペルミスから完全に気が狂った経験まで、さまざまな間違いが質問に含まれることはよくあります。

yshavitが指摘したように、オーバーロードはコンパイル時のバインディングを示します。catch-block は、必然的に実行時に解決されます。ただし、オーバーロードよりも適切な用語を見つけるのに途方に暮れています。

于 2014-08-17T13:23:18.757 に答える
2

catch ブロックはポリモーフィックにできますか?

catchブロックは、キャッチするように宣言されている例外だけでなく、直接または間接のサブクラスも受け入れることができるため、この質問には「はい」と答えます。catchポリモーフィックな動作を示すために複数のブロックは必要ありません。1つのブロックで十分です。実際、あなたの例にはそのようなブロックの 1 つがあります。それは をキャッチする最後のブロックですIOException

于 2014-08-17T12:47:04.347 に答える
2

事実上、このcatchフレーズは「このクラスのインスタンスまたはこのクラスのサブクラスである例外をキャッチする」ことを示しています-チェックtrueで返されるものは何でも。instanceof

したがって、ほとんどの定義では、ポリモーフィックになります。

于 2014-08-17T13:04:49.143 に答える
1

FileNotFoundExceptiontry ブロックが、または のサブクラスである例外をスローした場合FileNotFoundException、最初のcatchブロックが呼び出されます。

try ブロックが 、または のサブクラスではない例外IOException、または のサブクラスである例外をスローした場合、2 番目の catch ブロックが呼び出されます。IOExceptionFileNotFoundExceptionFileNotFoundException

ブロックが他の例外をスローする場合try、catch ブロックは実行されません。

したがって、引数として受け取る例外のタイプ、またはこのタイプのサブタイプを受け入れるため、それらは多態的であると言えると思います。

于 2014-08-17T12:42:32.927 に答える