法律调用和Java中重载函数的确定

6 java object

我在夏天做了一些自学,我遇到了这个我不确定的问题,我想知道是否有人可以提供帮助.我不确定最后一个号码,但是如果有人愿意检查这些号码,我会把我之前的答案包括在内.这不是任何课程的功课,我只是想确保在我前进之前理解我正在做的事情.

我正在考虑以下定义:

1. void m (Object o, long x, long y)
2. void m (String s, int x, long y)
3. void m (Object o, int x, long y)
4. void m (String s, long x, int y)
Run Code Online (Sandbox Code Playgroud)

哪些声明:

Object o;
String v;
int a;
long b;
Run Code Online (Sandbox Code Playgroud)

我正在检查这些电话:

m(v,a,b); Calls 2, because it is the most specific.
m(v,a,a); Not legal, because 2 and 4 could both be called (not specific enough).
m(v,b,a); Calls 4, because it is the most specific. 
m(v,b,b); Calls 1, because it is the only one that will fit (long cannot shorten to int).
m(o,b,b); Calls 1, similar reasoning as above answer.
m(o,a,a); Unsure.  I'm not sure of the precedence.
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Rya*_*art 2

这又是一个简单的“最具体”的例子。选择选项 3 的原因与您的第二次调用非法的原因相同。m(v,a,a)无法在m(String,long,int)和 之间进行选择m(String,int,long),因为它们同样具体。每一个都需要对其中一个参数进行一次扩展转换。m(o,a,a)另一方面,可以在m(Object,long,long)和之间进行选择m(Object,int,long)。其中之一需要两次扩大转换。另一种只需要一个,使其成为最具体的。