这个问题困扰了我一段时间。请帮忙
假设有两种方法
public void add(Object obj){
/* some logic*/
}
public void add(String str){
/*Some logic*/
}
所以当我打电话给add(null)
哪个方法会被执行以及为什么?
感谢
答案 0 :(得分:1)
它将使用String参数调用方法...
Java中的类是Object的直接或间接子类。所以String是Object的子类型,重载接受String的方法比重载接受Object的方法更具体。 String可以转换(upcast)到Object,但是Object不能转换(向下转换或向上转换)为String,因此采用String参数的方法更具体。因此,print(String)将调用print(String)。
答案 1 :(得分:1)
在这种情况下,String
参数版本获胜,因为String
是一个更具体的类型,因为每个类都是Object
的子类(除了它自己)。
无论如何,您仍然可以通过强制转换调用Object
参数版本。
e.g。
app.add((Object) null);
如果有多个潜在匹配,例如版本add(Integer i)
版本可用,则表示错误,并且无法编译。