这是一些片段
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);
}
}
这是一个简单的代码。我们将得到什么作为编译结果?
答案 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。