我们得到什么作为编译结果?

时间:2013-03-27 15:23:49

标签: java compilation

这是一些片段

  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);
      }
    }

这是一个简单的代码。我们将得到什么作为编译结果?

3 个答案:

答案 0 :(得分:3)

该程序将打印出“FileNotFoundException”。

这是由于多态方法在Java中的工作方式。 test.method(null)是一种模糊的方法调用,因为可以使用三种实现中的任何一种。当多个签名适合给定参数时,将选择最具体的子类。

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

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

通常,程序员应该意识到这种行为,但不应该试图利用它。这种代码可能非常混乱,并且经常会导致意想不到的后果。

答案 1 :(得分:0)

你得到FileNotFoundException

但是,你可以自己运行并亲眼看看;)

答案 2 :(得分:0)

是“对象”

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