gpt4 book ai didi

java - 使用 null 调用函数时自动向上转换

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

此代码打印出 MyUrgentException。谁能解释一下为什么?

class MyException extends Exception{
}

class MyCriticalException extends MyException{
}

class MyUrgentException extends MyCriticalException{
}

public class Test{
public void handler(MyException ex){
System.out.println("MyException");
}

public void handler(MyCriticalException ex){
System.out.println("MyCriticalException");
}

public void handler(MyUrgentException ex){
System.out.println("MyUrgentException");
}

public static void main(String [] args){
new Test().handler(null);
}
}

最佳答案

参见 answer对于 similar question .

参见 JLS 15.12.2 :

[...] There may be more than one such method declaration, in which case the most specific one is chosen.

所以回答你的问题。当多个重载方法适用于特定类型时,最具体的或“upcast”(如果需要)方法将被调用。


从直觉的角度来看,这也是有道理的。当您声明时:

public void handler(MyException ex) {...}

你是说:“我知道如何处理一般的 MyException”。

当你声明时:

public void handler(MyUrgentException ex){...}

您是说:“我知道如何处理 MyUrgentException 的特定情况”,因此也知道如何处理 MyException 的一般情况。

关于java - 使用 null 调用函数时自动向上转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6622402/

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