public class Test{
public static void abc(String s) {
System.out.println("String");
}
public static void abc(Object s) {
System.out.println("OBject");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
abc(null);
}}
Output-String
Run Code Online (Sandbox Code Playgroud)
我是java的初学者,我对上述程序的输出感到困惑.请解释一下输出的原因.
早期绑定(在编译时绑定最具体的方法).
当您重载方法时,将选择大多数特定方法.在您的情况下,选择的顺序是String> Object(因为null可以是任何引用类型).
在层次结构中,String比Object更具体.因此字符串被选中.事实上,Object是所有java对象中最不具体的
这是同样的JLS
http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.12.2.5
如果多个成员方法都可访问并适用于方法调用,则必须选择一个为运行时方法调度提供描述符.Java编程语言使用选择最具体方法的规则.
..... [规则]