私はJavaのオブジェクト指向初心者なんですが、例えばGirlとBoyでクラスを分けたとしたら、その2つのクラスの共通の変数をもたせることは可能ですか?GirlとBoyたちの共通のHPを作りたくて、一人のHPが減るとその共通のHPが減るというふうにしたいです。やはりGirlとBoyを一緒のクラスにまとめるしかないのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
あれっ、質問、早々に閉じてしまいましたね。回答を書いていたので、せっかくなので放流します。
質問者さんのケースでは、HPとは、言うなれば独立したひとつのオブジェクト、つまりインスタンスである訳です。Boy
やGirl
のインスタンスはそれを参照するわけですから、Boy
やGirl
のインスタンスフィールドにHP
のインスタンスを保持することで、同じHP
を扱うことができるし、よりHP
、Boy
、Girl
のそれぞれの関係を表していると思います。そんな訳で、例えば以下のようなコードになります。(面倒を避ける為、Main.javaひとつのファイルに収めています)
Java
1class HP { 2 int point = 0; 3 HP(int point) { 4 this.point = point; 5 } 6 7 // 一般的にはgetPoint()と名付けることが多いが、 8 // HPに対するgetなのだから、get()で充分であろうと。 9 int get() { 10 return this.point; 11 } 12 13 // 一般的にはsetPoint()と名付けることが多いが...以下同上。 14 void set(int point) { 15 this.point = point; 16 } 17 18 // HP消費 19 void consume(int point) { 20 this.point -= point; 21 if (this.point < 0) { 22 this.point = 0; 23 } 24 } 25} 26 27class Boy { 28 HP hp; 29 Boy(HP hp) { 30 this.hp = hp; 31 } 32 33 void work() { 34 hp.consume(10); 35 } 36} 37 38class Girl { 39 HP hp; 40 Girl(HP hp) { 41 this.hp = hp; 42 } 43 44 void work() { 45 hp.consume(20); 46 } 47} 48 49public class Main { 50 public static void main(String[] args) { 51 HP hp = new HP(100); 52 Boy boy = new Boy(hp); 53 Girl girl = new Girl(hp); 54 55 boy.work(); 56 System.out.println("boy.work()後の共通HP=" + hp.get()); 57 58 girl.work(); 59 System.out.println("girl.work()後の共通HP=" + hp.get()); 60 } 61}
これを実行すると以下のような結果となります。Boy
のインスタンス、Girl
のインスタンスそれぞれの操作で、共通のHP
の値が減じられていることが分かると思います。static
なフィールドを使う必要は無いですね。
CMD
1C>javac Main.java 2 3C>java Main 4boy.work()後の共通HP=90 5girl.work()後の共通HP=70
投稿2021/03/31 08:41
総合スコア9256
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/31 08:45
2021/03/31 08:53
2021/03/31 08:56
2021/03/31 08:59
2021/03/31 09:14
2021/03/31 09:17