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");
}
}
为什么程序打印"内部字符串方法"而不是"内部对象方法" ? 你能解释一下这背后的逻辑吗?
答案 0 :(得分:1)
编译器根据传递给方法的参数类型选择最具体的实现。
来自Java语言规范section on determining compile-time method signature:
如果多个成员方法都可访问并适用于方法调用,则必须选择一个为运行时方法调度提供描述符。 Java编程语言使用选择最具体方法的规则。
答案 1 :(得分:0)
它将选择适用的最高级别类型。由于String扩展了Object,因此它成为最高级别。如果你用一个不是字符串的东西来调用它,它应该使用Object one