重载方法解惑:
public class Snippet {
public void myMethod(String s) {
System.out.println("My String");
}
public void myMethod(Object o) {
System.out.println("My Object");
}
public static void main(String[] args) {
Snippet temp = new Snippet();
temp.myMethod(null);
}
}
上面这个例子应该输出上面呢?运行一下可以看到输出My String,因为Object比String更泛,也就是说String比Object更精准,优先调用更精准的重载。再扩展一下:
public class Snippet {
public void myMethod(Character c) {
System.out.println("My Character");
}
public void myMethod(Integer i) {
System.out.println("My Integer");
}
public void myMethod(String s) {
System.out.println("My String");
}
public void myMethod(Object o) {
System.out.println("My Object");
}
public static void main(String[] args) {
Snippet temp = new Snippet();
temp.myMethod(null);
}
}
这个会输出什么呢?会编译不通过,因为可以同时调用myMethod(Character c),myMethod(Integer i),myMethod(String s)这三个方法,它们三个都比Object具体,算是同一优先 级吧,因此造成不知道该调用谁了,就报有歧义的错误。
public class Snippet {
public void myMethod(String s) {
System.out.println("My String");
}
public void myMethod(Object o) {
System.out.println("My Object");
}
public static void main(String[] args) {
Snippet temp = new Snippet();
temp.myMethod(null);
}
}
上面这个例子应该输出上面呢?运行一下可以看到输出My String,因为Object比String更泛,也就是说String比Object更精准,优先调用更精准的重载。再扩展一下:
public class Snippet {
public void myMethod(Character c) {
System.out.println("My Character");
}
public void myMethod(Integer i) {
System.out.println("My Integer");
}
public void myMethod(String s) {
System.out.println("My String");
}
public void myMethod(Object o) {
System.out.println("My Object");
}
public static void main(String[] args) {
Snippet temp = new Snippet();
temp.myMethod(null);
}
}
这个会输出什么呢?会编译不通过,因为可以同时调用myMethod(Character c),myMethod(Integer i),myMethod(String s)这三个方法,它们三个都比Object具体,算是同一优先 级吧,因此造成不知道该调用谁了,就报有歧义的错误。