java 方法重载的问题,求解释

haopeng 发布于 2012/08/17 13:17
阅读 428
收藏 0
package opg;

public class Test1 {

	public void test(Object o){
		System.out.println("o");
	}
	public void test(String s){
		System.out.println("s");
	}
	public static void main(String[] args) {
		
		new Test1().test(null);
	}

}

请问这个程序的执行结果为"s",求解释!!!

加载中
1
canghailan
canghailan

String比Object更“特定”。具体可以看Java语言规范(JLS)

Java语言规范(JLS)15.12节 方法调用表达式。

JLS 15.12.2节编译期确定方法签名分为以下几个步骤:

1)不允许拆装箱及使用可变元数方法进行重载解析,即可由类型宽化(扩展基本转换、扩展引用转换)确定的匹配元数方法。(确保较老语言版本中任何有效的方法调用不会因为引入隐式拆装箱、可变元数方法而被当成不明确的)

2)允许拆装箱但不允许使用可变元数方法进行重载解析,即可由方法调用转换确定的匹配元数方法。(确保如果存在一个可用固定元数方法,可变元数方法就不会被调用)

3)允许拆装箱及使用可变元数方法进行重载解析。

以上每个步骤中,如果存在多个符合的方法,则需在它们中选择最特定的方法。

JLS 5.3节方法调用转换规定可包括以下转换:

同一性转换:如int->int, Object->Object

扩展基本转换:如short->int

扩展引用转换:如String->Object

装箱转换,可后接扩展引用转换:如int->Integer->Number

拆箱转换,可后接扩展基本转换:如Short->short->int

0
如风随影
如风随影
这个很简单null被看成字符串 所以系统优先调用 String s  这个方法
0
Eric贰
Eric贰
坑爹~这道题要是选作面试题。。。。
haopeng
haopeng
被你猜对了,这道题就是我面试时的笔试题。。。
0
SNY
SNY
String的地位是相当高
0
卢作晋
卢作晋
子类优先?
返回顶部
顶部