我有那段代码,只是得到了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
as参数调用该方法.
如果有两种方法具有相同的特定性,那么您的代码将不会编译错误,即存在模糊的方法调用.