首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

满载方法的迷糊

2012-09-01 
重载方法的迷糊重载方法解惑:public class Snippet {public void myMethod(String s) {System.out.println

重载方法的迷糊
重载方法解惑:

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

热点排行