使用单个参数重载java方法

时间:2015-01-22 17:42:42

标签: java overloading

public class HelloWorld{
     public static void main(String []args){
        new SampleString().add(null);
     }
}

class SampleString{
    public void add(Object s){
        System.out.println("Inside Object method");
    }
    public void add(String s){
        System.out.println("Inside string method");
    }
}

为什么程序打印"内部字符串方法"而不是"内部对象方法" ? 你能解释一下这背后的逻辑吗?

2 个答案:

答案 0 :(得分:1)

编译器根据传递给方法的参数类型选择最具体的实现。

来自Java语言规范section on determining compile-time method signature

  

如果多个成员方法都可访问并适用于方法调用,则必须选择一个为运行时方法调度提供描述符。 Java编程语言使用选择最具体方法的规则。

答案 1 :(得分:0)

它将选择适用的最高级别类型。由于String扩展了Object,因此它成为最高级别。如果你用一个不是字符串的东西来调用它,它应该使用Object one