重载方法的迷糊

重载方法解惑:

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具体,算是同一优先 级吧,因此造成不知道该调用谁了,就报有歧义的错误。

你可能感兴趣的:(方法)