- ベストアンサー
「まったく同じ引数定義の場合」とは?
- オーバーロードを使ったプログラムにおいて、引数の定義が完全に一致している場合を指します。
- つまり、メソッドの引数のデータ型や個数がまったく同じであることを意味します。
- 引数定義が同じ場合、処理内容や戻り値が異なっていても、複数のメソッドを定義することはできません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
確かにちょっと誤解を招くような文章ですが、この場合は 2番目のメソッドがあって、それの戻り値だけを変えたメソッドを作ったら、という解釈 が正しいと思います。 つまり、 class Test { int sum(int i,double d){ return (int)(i + d); } double sum(int i, double d){ return i + d; } } のように戻り値がint の場合とdoubleの場合の2つのsumというメソッドがTestというクラスに宣言されているという状態のことを言っていると思います。 もし int sum(int i,double d)が無くてdouble sum(int i,double d)のみあるという状態ならコンパイルエラーにはなりません。 ようは同じクラスにメソッド名が同じで、引数も同じというメソッドがあったらエラーになるということです。
その他の回答 (2)
- ketuago65
- ベストアンサー率50% (13/26)
すいません補足です。 2番目というのは int sum(int i,double d){ return (int)(i+d); } のことでOKです。
お礼
回答ありがとうございます。
- ketuago65
- ベストアンサー率50% (13/26)
オーバーロードには、戻り値は変えても変えなくてもいいが引数は必ず変更しなければいけないというルールがあります。 引数がなんなのかは理解できているでしょうか? 引数とはメソッドに渡す値の部分で、上の例で言えばsumの()の中に定義されている int i,double d の二つです。 つまり上の例にかいてあるプログラムであれば int sum(int i,double d)とdouble sum(int i,double d) は戻り値がint と doubleで違いますが、引数( ( )のなか)が同じなので オーバーロードができません。
お礼
ketuago65様、丁寧な解説ありがとうございます。 参考書に書かれている「2番目のメソッド」とは int sum(int i, int j){ return i + j; } を指しているのでしょうか? つまり int sum(int i, int j){ return i + j; から double sum(int i, double d){ return i + d; に変更した場合と解釈すればいいのでしょうか? よろしくお願いいたします。
お礼
詳しい解説ありがとうございます。