 |
 |
| 閲覧数:414 |
掲示板(コンストラクタのthis()について) |
 |
| 名前 |
匿名
|
| 題名 |
コンストラクタのthis()について
|
質問内容
質問を評価する
(0ポイント)
|
Java初心者です。 以下のようなプログラムがあった場合、 2と2’は実質的にやっていることは 同じだと思うのですが 2はエラーになり、2’はOKになるのは なぜでしょうか? 2の「this.MAXHP」を「Hero.MAXHP」に 変えればよいのは分かるのですが 「this.MAXHP」でダメな理由がわかりません。 ご教授願います。
public class Hero { String name; int hp; static final int MAXHP = 50; // コンストラクタ1 Hero (String name, int hp) { this.name = name; this.hp = hp; }
// コンストラクタ2 Hero (String name) { this(name, this.MAXHP); }
// コンストラクタ2’ Hero (String name) { this.name = name; this.hp = this.MAXHP; } }
|
| 質問日時 |
2014-01-05 23:04:43 |
|
| 名前 |
匿名
|
回答内容
回答を評価する
(0ポイント)
|
this(String, int) の引数で thisは使えません。
これは
this(String, int) が実行されるまで オブジェクトが生成されないからです。
2' の場合
Hero (String name) { this(); // または this(null, 0); this.name = name; this.hp = this.MAXHP; }
が実際にコンパイルされるコードだからです。
|
| 回答日時 |
2014-01-06 01:31:20 |
|
| 名前 |
匿名
|
回答内容
回答を評価する
(0ポイント)
|
staticをthisで取るのが変だと言うのは分かるだろか。
|
| 回答日時 |
2014-01-06 20:07:35 |
|
| 名前 |
匿名
|
回答内容
回答を評価する
(0ポイント)
|
質問者です。 ご回答ありがとうございます。
>回答者1さん >this(String, int) が実行されるまで オブジェクトが 生成されないからです。 とのことですが、 new Hero(); が宣言された時点で、インスタンスは生成されるのでは ないのですか? もしそうでないのならば、コンストラクタ1が呼び出さ れたときは どの時点でインスタンスが生成され コンストラクタ1内で、this.〜〜が利用可能になるの でしょうか?
>回答者2さん すみません、言葉が足りませんでしたが 仮にMAXHPがstaticじゃないとしても this(name, this.MAXHP); というコードはコンパイルエラーになるよね? ということが言いたかったんです。
|
| 回答日時 |
2014-01-11 23:30:13 |
|
| 名前 |
|
回答内容
回答を評価する
(0ポイント)
|
ある程度 Java がわかってきて、細かい仕様に疑問を感じるなら仕様書を 読んでみたらいかがでしょうか? http://docs.oracle.com/javase/specs/index.html super(...) や this(...) が済むまでインスタンスにはアクセス出来ません。 いつ生成されるかではなく Java 言語の仕様です。
|
| 回答日時 |
2014-01-13 01:39:11 |
|
 |
| 回答内容を入力し、「確認」ボタンをクリックしてください。 |
 |
 |
 |
|
ログインしていません。ログインしなくても回答はできますが、ログインすると、質問・回答の管理、更新があった場合のメールでの通知を受けることができます。
ユーザIDをお持ちでない方は「ID登録」からユーザIDの登録を行ってください。
|
|
|
|
 |
 |
|
 |
|
 |
 |