6

夏の間、独学をしていて、よくわからないこの問題に出くわしました。誰か助けてもらえないかと思っていました。最後の番号はわかりませんが、以前の回答も含めて確認していただければ幸いです。これはどのクラスの宿題でもありません。先に進む前に、自分が何をしているのかを理解したいだけです。

次の定義を検討しています。

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)

これらの宣言:

Object o;
String v;
int a;
long b;

そして、私はこれらの呼び出しを調べています:

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.

前もって感謝します!

4

3 に答える 3

0

m(v,b,b); 適合するのは 1 だけなので、1 を呼び出します (long を int に短縮することはできません)。

この呼び出し 1 のもう 1 つの理由は、ポリモーフィズムと Java の単一ルート階層によるものです。String (または任意のオブジェクト) は、Object クラスの子孫です。オブジェクトを引数として取るメソッドはすべて、文字列を取ることができます - ポリモーフィズムの本質です。

于 2013-05-27T20:57:25.130 に答える