我对Java中的重载方法有误解。
这些是否过载?
public String eJava(int age, String name, double duration);
float eJava(double name, String age, byte duration);
在测试中,我写的答案是肯定的。但我不这么认为。 原因: 让我们举一个方法论证的例子:eJava(111,“word”,222);
正如我所知,这些参数可以传递给两种方法。因为111可以被double和int接受,所以String接受“word”,而byte或double可以接受222。所以我认为正确答案是“编译错误”。
好的,这些方法有不同的返回类型,但这并不重要。
我做错了什么? 谢谢
答案 0 :(得分:5)
是的,它们是重载方法,因为它们具有相同的名称但不同的参数类型。 apomeme的答案提供了更多细节。
回答第二个问题:
您的电话eJava(111, "word", 222)
不明确,也不是编译错误。它匹配第一种方法:eJava(int age, String name, double duration)
。它与第二种方法不匹配,因为它的第三个参数是一个字节,并且int文字不能隐式转换为一个字节。除非您明确地转换它们,否则不允许进行这种缩小的转换。
但是,如果第二种方法是
float eJava(double name, String age, long duration)
然后调用确实是模糊的和编译错误,因为int literal 可以隐式转换为long。
答案 1 :(得分:0)
一个类可能有多个具有相同名称的方法,但是
使用不同的参数列表。这称为方法重载。
例如:
具有相同名称的方法:
System.out.println("Hello")
- >类型为字符串
System.out.println(4+8)
- >类型为int
System.out.println("I have"+100+"$")
- >类型为String + int
第二个例子:
具有相同名称的方法:
int size(int height,int width)
- 参数
中有两种类型
int size(int distance)
- > peremeter中的一种类型。