下面的代码执行时没有任何歧义的编译错误,输出是"ArithmeticException".。男人们可以帮我知道原因。
class Test {
public static void main(String[] args) throws UnknownHostException, IOException {
testMetod(null);
}
// Overloaded method of parameter type Object
private static void testMetod(Object object) {
System.out.println("Object");
}
// Overloaded method of parameter type Exception
private static void testMetod(Exception e) {
System.out.println("Exception");
}
// Overloaded method of parameter type ArithmeticException
private static void testMetod(ArithmeticException ae) {
System.out.println("ArithmeticException");
}
}发布于 2015-08-05 11:35:55
在这种情况下,规则是匹配最具体的方法。因为ArithmeticException extends Exception和ArithmeticException extends Object,所以没有歧义:ArithmeticException比其他任何一个都更具体。
但是,如果添加以下内容:
private static void testMetod(String string) {
System.out.println("String");
}您将得到一个编译错误,因为ArithmeticException extends String既不是真,也不是正确的:没有一个最特定的参数类。
在这一点上说,这一切都发生在编译时,这可能是很重要的。一旦解析了目标方法并编译了代码,对重载方法的调用就像对任何其他方法的调用一样。这与方法重写__形成了对比。
https://stackoverflow.com/questions/31831121
复制相似问题