Java 使用字符串和对象进行检查
代码如下:Java 使用字符串和对象进行检查,java,string,oop,object,core,Java,String,Oop,Object,Core,代码如下: public class OverloadingByObject { public static void main(String[] args) { // TODO Auto-generated method stub Object object = null; new OverloadingByObject().SayHi(null); new OverloadingByObject().SayHi(obje
public class OverloadingByObject {
public static void main(String[] args) {
// TODO Auto-generated method stub
Object object = null;
new OverloadingByObject().SayHi(null);
new OverloadingByObject().SayHi(object);
}
public void SayHi(String str) {
System.out.println("String called");
}
public void SayHi(Object obj) {
System.out.println("Object called");
}
}
当我传递null时,它应该调用Object的方法。它调用字符串方法的原因是什么?
null
可以分配给任何引用类型。在决定调用哪个重载版本的方法时,将选择具有最特定参数的方法<代码>字符串比对象
更具体(因为字符串
是对象
的一个子类)。因此,为null
参数调用SayHi(String str)
。因此,您确信它更喜欢第一个子类metod。@Krishna它更喜欢具有最特定参数类型的方法。但是,如果您添加另一个方法,例如SayHi(Integer i)
,调用SayHi(null)
将无法通过编译,因为整数和字符串都不比另一个更为具体。运行此示例时,我会得到两次“Object called”。@user987339奇怪,我得到的是字符串调用对象
,这是预期的行为。您可以将其粘贴到ideone上吗?