为什么没有为ArithmeticException参数方法引发歧义

时间:2015-08-05 11:23:18

标签: java oop exception core arithmeticexception

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

1 个答案:

答案 0 :(得分:3)

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

如果你添加这个:

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

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

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

形成对比