【問題文】addメソッドはNumberクラスの参照を引数にとり、
自分の数との合計値をフィールドに持つ新しいオブジェクトを作成して返します。
(わかりやすいjavaオブジェクト指向入門編 P135より)
package ex6_2;
public class Number {
private int n;
public Number(int n){this.n = n;}
public int getN(){return n;}
public Number copy(){
Number num = new Number(n);
return num;
}
public Number add(Number m){
return new Number(n+m.n);
}
}
package ex6_2;
public class Exec {
public static void main(String[] args) {
Number a = new Number(10);
Number b = new Number(100);
Number c = a.add(b);
System.out.println("a + b =" + c.getN());
}
}
実行結果
a + b = 110
「return new Number(n+m.n);」と「Number c = a.add(b);」が問題の空欄部分です。
前者の「Number(n+m.n)」が何を意味しているのか全く分かりません。
よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
> 前者の「Number(n+m.n)」が何を意味しているのか全く分かりません。
やっている事を一つ一つ見ていけば理解できるかと思います。
----------------------------------------
public Number add(Number m){
return new Number(n+m.n);
}
----------------------------------------
これを分解していくと下記の様に書き直せます。
----------------------------------------
public Number add(Number m) {
int argN = m.n; // (1) 引数のNumberオブジェクトのnを取り出す。
int num = n + argN; // (2) 自分自身のnと(1)で取り出した引数のNumberオブジェクトのnを足して、変数numに入れる。
Number number = new Number(num); // (3) 足した結果を元に新しいNumberオブジェクトを作る。
return number; // (4) 作った新しいNumberオブジェクトをメソッドの戻り値として返す。
}
----------------------------------------
したがって、addメソッドは「自分自身と引数のNumberオブジェクトのnの値を足し合わせたものをnに持つ新たなNumberオブジェクトを生成して返す」もの、と言う事ができます。
詳細で丁寧な解説ありがとうございます。
やっと理解出来ました。
私の場合、「Number(n+m.n);」の部分を「Number((n+m).n);」のように勝手に解釈して、
その先入観がずっと頭から離れず堂々巡りをしておりました。
No.3
- 回答日時:
> 前者の「Number(n+m.n)」が何を意味しているのか全く分かりません。
new Number(n+m.n)は、new Number(this.n+m.n)と書き換える事ができる。
public Number add(Number m) {
return new Number(this.n+m.n);
}
つまり、自分自身のnと引数で指定されたNumberクラスの別インスタンスのnを足し合わせたintを引数にさらに別のNumberクラスのインスタンスを作ってそいつをリターンしている訳だ。
なので、
Number a = new Number(10);
Number b = new Number(100);
Number c = a.add(b);
は、nが10であるaと、nが100であるbの2つのNumberクラスのインスタンスが作られた後、a.add(b)というところでnew Number(a.n+b.n)すなわちnew Number(10+100)でnが100であるNumberクラスのインスタンスが作られてcに代入されているのだな。
返信ありがとうございます。
「 Number(this.n+m.n)」のように考えれば良かったのですね。
その辺に気が付かなくて頭が混乱していました。
具体的な例を挙げて頂き、とても勉強になります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- UNIX・Linux 次の要件を満たすにはどのように修正したらよろしいでしょうか 1 2022/11/24 20:57
- Java java final 1 2022/06/10 22:49
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- 英語 be the numberの意味 2 2022/04/18 23:53
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでの[]
-
Excel VBA 定数にオブジェクト...
-
VB.netでメソッドからコントロ...
-
エクセルVBA 画像を貼り付ける...
-
servletからjspへオブジェクト...
-
java名簿管理プログラム
-
VB.netでJavaのCollection.shuf...
-
Dispose()は、どんな時に使うの...
-
UTF-8のテキストファイルを開く...
-
C#のクラスで値渡しをする
-
String型からlong型への変換は...
-
VB.NETでのnothing の意義について
-
javaで配列の中身を表示する方法
-
javaで、、、
-
オブジェクトの参照渡しについて
-
GridViewに行追加するには?
-
コードの意味を解説して頂けな...
-
ピクチャーボックスに点を打つ...
-
MessageBox.Show(Me,…の「Me」...
-
Vba ListViewの行挿入に関して...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでの[]
-
サーブレットコンテキストの意...
-
エクセルVBA 画像を貼り付ける...
-
C#のクラスで値渡しをする
-
VB.netでメソッドからコントロ...
-
Vba ListViewの行挿入に関して...
-
VB.NETでのnothing の意義について
-
Excel VBA 定数にオブジェクト...
-
Dispose()は、どんな時に使うの...
-
servletからjspへオブジェクト...
-
ピクチャーボックスに点を打つ...
-
JSPでのArrayListの表示につい...
-
MessageBox.Show(Me,…の「Me」...
-
String型からlong型への変換は...
-
PrintFormを使用してのプリント
-
getParameter()について
-
ArrayListのデバッグ方法について
-
VBスクリプトでテキストファイ...
-
エクセルVBA/SpecialCellsで特...
-
オブジェクトの参照渡しについて
おすすめ情報