java中重载的方法

mis*_*v23 3 java overloading

我对Java中的重载方法有误解.

这些是否过载?

  1. public String eJava(int age, String name, double duration);
  2. float eJava(double name, String age, byte duration);

在我写的测试中答案是肯定的.但我不这么认为.理由:让我们举一个方法论证的例子:eJava(111,"word",222);

正如我所知,这些参数可以传递给两种方法.因为111可以被double和int接受,所以String接受"word",而byte或double可以接受222.所以我认为正确的答案是"编译错误".

好的,这些方法有不同的返回类型,但这并不重要.

我究竟做错了什么?谢谢

apo*_*ene 5

按照定义:

如果一个类有多个具有相同名称但参数不同的方法,则称为方法重载.有两种方法可以在java中重载该方法

By changing number of arguments
By changing the data type
Run Code Online (Sandbox Code Playgroud)

所以正确答案是肯定的,那是两个重载方法


Kli*_*cou 5

是的,它们是重载方法,因为它们具有相同的名称但不同的参数类型.apomeme的答案提供了更多细节.

回答第二个问题:

您的调用eJava(111, "word", 222)不明确,而不是编译错误.它匹配第一种方法:eJava(int age, String name, double duration).它与第二种方法不匹配,因为它的第三个参数是一个字节,并且int文字不能隐式转换为一个字节.除非您明确地转换它们,否则不允许这种缩小的转换.

但是,如果第二种方法是

float eJava(double name, String age, long duration)
Run Code Online (Sandbox Code Playgroud)

然后调用确实是模糊的和编译错误,因为int文字可以隐式转换为long.