gpt4 book ai didi

java - 为什么不为 ArithmeticException 参数方法引发歧义

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:20 28 4
gpt4 key购买 nike

下面的代码执行时没有任何歧义的编译错误,输出是“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");
}
}

最佳答案

在这种情况下,规则是 match the most specific method .由于 ArithmeticException extends ExceptionArithmeticException extends Object,因此没有歧义:ArithmeticException 比其他任何一个都更具体。

如果你添加这个:

private static void testMetod(String string) {
System.out.println("String");
}

你会得到一个编译错误,因为 ArithmeticException extends String 都不为真,反之亦然:没有一个最具体的参数类。

在这一点上说所有这一切都发生在编译时可能很重要。解析目标方法并编译代码后,调用重载 方法就像调用任何其他方法一样。这与方法覆盖形成对比。

关于java - 为什么不为 ArithmeticException 参数方法引发歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31831121/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com