这里适用的一般规则是:如果一个方法签名严格比另一个方法签名 更具体 ,则Java选择它时不会出错。
从直觉上讲,如果您可以完全删除一个方法签名,则该方法签名更为具体,而另一个较不具体的方法签名将适用于每个现有调用。
当在签名
sum(int... args)和
sum(double... args)签名之间进行选择时,签名
sum(int...args)更为具体,因为对该方法的任何调用也可以通过
sum(double...args)应用扩展转换而传递给该方法。对于
sum(boolean... args)不能进行类似转换的方法而言,情况并不相同。
Java语言规范,SE 8版本:
15.12。方法调用表达式
15.12.2.5。选择最具体的方法
Java编程语言使用选择 最具体 方法的规则。
…
如果满足以下任一条件,则对于使用参数表达式e1,…,ek的调用,一个适用的方法m1比另一适用的方法m2更具体:
…
*m2不是通用的,并且m1和m2可通过严格或松散调用来应用,并且m1具有形式参数类型S1,…,Sn,而m2具有形式参数类型T1,…,Tn,则类型Si
更 对于所有i(1≤i≤n,n = k),自变量ei比Ti 特定 。…
如果S <:T(第4.10节),则对于任何表达式,类型S都比类型T更具体。
4.10。子类型化
4.10.1。基本类型之间的子类型化
双> 1浮点
浮动> 1长
long> 1 int



