java中关于int/long和String/object参数的方法重载
对于下面的程序,为什么调用具有int和String参数的方法而不是long和Object 想知道为什么编译器选择int而不是java中关于int/long和String/object参数的方法重载,java,overloading,Java,Overloading,对于下面的程序,为什么调用具有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+
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);
}
}
对于add(2,3)
方法,您正在传递整数,这就是调用整数的原因。
对于
方法(null)
,选择最具体的方法参数。在这种情况下,String
比Object
更具体。因此方法(字符串st)代码>被调用。这个概念被称为早期绑定。大多数特定的方法(基于参数)是在编译时选择的
Object
是java中最不特定的类,因为它是所有类中的超级类
如果一个方法调用可以访问并适用于多个成员方法,则有必要选择一个成员方法来为运行时方法分派提供描述符。Java编程语言使用的规则是选择最具体的方法
其选择方式在此处指定的规则集中给出
这很简单,因为Java默认将数字视为int,将字母视为字符串对象,而不是一般对象
因此,当您传递add(2,3)时,它将参数作为正常int
要调用add(long,long),请将参数传递为添加(2.0,4.0)类似的内容。和用于调用函数方法(对象)
1.首先键入将字符串强制转换为键入对象
字符串str;
str=(对象)“你好世界”
2.然后传递给方法(str) 不,这不是面试必须寻找的完整且完全正确的答案。@Khay我想你已经知道答案,你正在测试这里的所有人。是的-使用add(2L,3L);用long或method((Object)null)调用它:]Rafa El的评论得到了支持,但它是错误的。编译器不会选择它找到的第一个方法;它选择适合参数的最具体的方法。试着在课堂上把这些方法按不同的顺序排列,你会发现这并不重要。可能是因为它很有趣,所以被选上了。它不是“有趣”,只是错了。然后会选择最具体的方法。如果你想知道确切的规则,就去查一下。哦!现在我想起来了,其实我在高中时就学会了!。我真丢脸。