【发布时间】:2017-10-27 02:50:48
【问题描述】:
对于下面的程序,为什么调用带有 int 和 String 参数的方法而不是 long 和 Object?
想知道为什么编译器选择 int 而不是 long 和 String 而不是 Object 参数。
注意:这是在一次采访中提出的。
public class MethodOverloadingTest {
public static void add(int n, int m){
System.out.println("Int method");
System.out.println(n+m);
}
public static void add(long n, long m){
System.out.println("Long method");
System.out.println(n+m);
}
public static void method(String st){
System.out.println("from String method");
}
public static void method(Object obj){
System.out.println("from Object method");
}
/**
* @param args
*/
public static void main(String[] args) {
add(2,3);
method(null);
}
}
【问题讨论】:
-
Rafa El 的评论得到了支持,但这是错误的。编译器不会选择它找到的第一个方法;它选择适合论点的最具体的方法。尝试将方法在类中以不同的顺序排列,您会发现这并不重要。
-
也许因为它很有趣而被投票赞成。
-
这不是“好笑”,只是错了。
-
然后会选择最具体的方法。如果您想知道确切的规则,请在Java Language Specification 中查找。
-
哦!现在我记得我实际上在高中时就学会了它!真丢脸。
标签: java overloading