一尘不染

Java中将为空选择哪个重载?

java

如果我用Java编写此行:

JOptionPane.showInputDialog(null, "Write something");

将调用哪种方法?

  • showInputDialog(Component parent, Object message)
  • showInputDialog(Object message, Object initialSelectionValue)

我可以测试一下。但是在其他类似情况下,我想知道会发生什么。


阅读 389

收藏
2020-03-02

共1个答案

一尘不染

在最具体的方法将被调用-在这种情况下,

showInputDialog(Component parent, Object message)

这通常在规范(15.12.2)中的过载解析的“确定方法签名”步骤下进行,尤其是在“选择最特定的方法”下。

在不涉及细节的情况下(你可以在此处像在规范中阅读的一样详细),引言给出了很好的总结:

如果可以访问多个成员方法并将其应用于方法调用,则必须选择一个成员方法来为运行时方法分派提供描述符。Java编程语言使用选择最特定方法的规则。

非正式的直觉是,如果第一个方法处理的任何调用都可以传递给另一个方法而没有编译时类型错误,则一个方法比另一个方法更具体。

2020-03-02