我尝试了以下代码,但不了解输出:
Class A{
public void print(Object o){
System.out.println("Object");
}
public void print(String o){
System.out.println("String");
}
public static void main(String arr[]){
A obj = new A();
obj.print(null);
}
}
输出:字符串
为什么?
感谢您的关注!
答案 0 :(得分:2)
选择具有更具体参数类型的方法。 String比Object更具体。
请注意,如果您使用另一个print
方法,例如Integer
参数,则会出现编译错误,因为在这种情况下,编译器没有规则来决定是否调用{ {1}}或print(String)
。有print(Integer)
和print(String)
时它起作用的原因是String是Object的子类,因此首选print(Object)
。
答案 1 :(得分:2)
答案 2 :(得分:1)
匹配方法中的最少泛型方法将由编译器选择。 即,编译器将首先发现String和Object都可以为null。然后它选择类层次结构中较低级别的那个。 (对象的级别高于String)