-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)是一个模棱两可的方法调用,因为可以使用这三种实现中的任何一种。当多个签名适用于给定参数时,将选择最具体的子类。

在这种情况下,这是FileNotFoundException因为继承层次结构如下所示:

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

一般来说,程序员应该意识到这种行为,但不应该试图利用它。这种代码可能非常令人困惑,并且经常导致意想不到的后果。

于 2013-03-27T15:29:49.597 回答
0

会是“对象”吗

Null 不是我知道的对象,但我怀疑 Object o arg 会设置为 null。

于 2013-03-27T15:28:02.633 回答
0

你得到 FileNotFoundException

但是是的,您可以运行它并自己查看;)

于 2013-03-27T15:26:32.803 回答