在我看来,最明显的原因是它允许编译器保证实际上会有一个要调用的函数。
假设Java根据运行时类型选择了函数,并且您这样编写:
public class MyClass{ public void foo(Integer i) { System.out.println("Integer"); } public void foo(String s) { System.out.println("String"); } public static void main(String[] args) { Object o1=new String("Hello world"); foo(o1); Object o2=new Double(42); foo(o2); }}输出是什么?对foo的第一个调用可能显示“
String”,但是第二个调用无处可去。我想它可能会生成运行时错误。这类似于严格类型与宽松类型的论点。如果它在运行时选择了该功能,则从某种意义上讲它可能会更加灵活。但是,通过在编译时选择函数,我们可以在编译时获得错误消息,而不必等到运行时,并确保我们已对每种可能的数据组合使用了所有可能的路径。



