-7

これはいくつかのスニペットです

  public class Overload {
      public void method(Object o) {
        System.out.println("Object");
      }
      public void method(java.io.FileNotFoundException f) {
        System.out.println("FileNotFoundException");
      }
      public void method(java.io.IOException i) {
        System.out.println("IOException");
      }
      public static void main(String args[]) {
        Overload test = new Overload();
        test.method(null);
      }
    }

これは単純なコードです。コンパイル結果として何が得られるでしょうか。

4

3 に答える 3

3

このプログラムは、「FileNotFoundException」を出力します。

これは、Java でポリモーフィック メソッドが機能する方法によるものです。 test.method(null)3 つの実装のいずれかを使用できるため、あいまいなメソッド呼び出しです。複数の署名が特定のパラメータに適している場合、最も具体的なサブクラスが選択されます。

この場合FileNotFoundException、継承階層が次のようになっているためです。

System.Object
  System.Exception
    System.SystemException
      System.IO.IOException
        System.IO.FileNotFoundException

一般に、プログラマーはこの動作を認識している必要がありますが、それを利用しようとすべきではありません。この種のコードは非常に混乱を招く可能性があり、多くの場合、意図しない結果につながります。

于 2013-03-27T15:29:49.597 に答える
0

FileNotFoundException が発生します

しかし、はい、それを実行して自分で見ることができます;)

于 2013-03-27T15:26:32.803 に答える
0

「オブジェクト」でしょうか。

Null は私が知っているオブジェクトではありませんが、Object o arg が null に設定されるのではないかと思います。

于 2013-03-27T15:28:02.633 に答える