This question already has answers here:
Method Overloading for null argument
(7 个回答)
5年前关闭。
我有那段代码,只是得到
任何想法为什么会发生?
(7 个回答)
5年前关闭。
我有那段代码,只是得到
FileNotFoundException
。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);
}
}
任何想法为什么会发生?
最佳答案
因为它确实访问了最具体的方法,在这种情况下是 method(java.io.FileNotFoundException f)
FileNotFoundException 的继承顺序java.lang.Object -> java.lang.Throwable -> java.lang.Exception -> java.io.IOException -> java.io.FileNotFoundException
。
如您所见, IOException
继承自 Object
(在某些时候),这使它比 Object
更具体。 FileNotFoundException
比 IOException
更具体。最后编译器决定它应该以 FileNotFoundException
作为参数调用该方法。
如果有两个同样特定的方法,您的代码将不会编译,并出现方法调用不明确的错误。
关于java - 通过获取 FileNotFoundException 感到困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34633438/
10-11 16:25