プロが教える店舗&オフィスのセキュリティ対策術

「これならわかるJAVA入門の入門 坂下夕里 P186,187」についての質問です。

http://up.mugitya.com/img/Lv.1_up121711.jpg
http://up1m.ko.gs/src/koups217.jpg
http://josup.xrea.jp/josup/src/up1248.jpg
http://219.94.194.39/up/src/f3236.jpg

【オーバーロードを使ったプログラム】
class Test {
int sum(int i, int j){
return i + j;
}

int sum(int i,double d){
return (int)(i + d);
}

}

public class sample35 {
public static void main(String[] args) {
Test test = new Test();
System.out.println(test.sum(1,2));
System.out.println(test.sum(2,2.5));
}
}

たとえば、2番目のメソッドの戻り値をdouble型にしたメソッドを
オーバーロードしようとするとどうなるでしょう?

double sum(int i, double d){
return i + d;

コンパイル時にエラーになります。まったく同じ引数定義の場合は、
処理内容や戻り値が違っても複数定義することはできません。

【質問】
「まったく同じ引数定義の場合」とはどういう事でしょうか?
どことどこが同じなのでしょうか。

A 回答 (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)のみあるという状態ならコンパイルエラーにはなりません。

ようは同じクラスにメソッド名が同じで、引数も同じというメソッドがあったらエラーになるということです。
    • good
    • 0
この回答へのお礼

詳しい解説ありがとうございます。

お礼日時:2010/07/12 12:55

すいません補足です。


2番目というのは

int sum(int i,double d){
return (int)(i+d);
}

のことでOKです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2010/07/12 12:56

オーバーロードには、戻り値は変えても変えなくてもいいが引数は必ず変更しなければいけないというルールがあります。



引数がなんなのかは理解できているでしょうか?
引数とはメソッドに渡す値の部分で、上の例で言えばsumの()の中に定義されている
int i,double d の二つです。

つまり上の例にかいてあるプログラムであれば
int sum(int i,double d)とdouble sum(int i,double d)
は戻り値がint と doubleで違いますが、引数( ( )のなか)が同じなので
オーバーロードができません。
    • good
    • 0
この回答へのお礼

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;
に変更した場合と解釈すればいいのでしょうか?

よろしくお願いいたします。

お礼日時:2010/07/08 13:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!