public class Test {
public static void main(String[] args) throws ClassNotFoundException {
new Test().f("dfffg"); // it is running perfectly
new Test().f(1, 1); // it is giving ambiguity
}
public void f(int a,long b){
System.out.println("in int and long");
}
public void f(long a,int b){
System.out.println("in long and int");
}
public void f(String s) {
System.out.println("in String");
}
public void f(StringBuffer o) {
System.out.println("in String bufer");
}
public void f(Object o){
System.out.println("in object");
}
}当我执行这个new Test().f("dfffg");时,它运行得很好,尽管我们有以StringBuffer和对象为参数的重载方法。
而f(1,1)给出歧义,我能理解。
发布于 2016-05-22 06:13:04
new Test().f("dfffg")匹配public void f(String s)和public void f(Object o)的签名。在传递对象参数时,将选择具有最特定参数类型的方法:在本例中为public void f(String s)。String比Object更具体,因为String是Object的子类。
在本例中,public void f(StringBuffer o)与此无关,因为StringBuffer不是String的超类,因此不能将String传递给需要StringBuffer的方法。
https://stackoverflow.com/questions/37371148
复制相似问题