前提
〇質問について
・javaのカプセル化に関する質問です。
・エラーは出ておらず、参考書のソースコードに関する疑問点です。
〇ソースコードの大まかな構成について
・Wizardクラス(魔法使い)、Wandクラス(杖)、Heroクラス(勇者)があります。
・今回、質問したいのはWizardクラスについて。
・WizardクラスはWandクラスのインスタンスをフィールドに持ちます。
・WizardクラスはHeroクラスのHpフィールド(体力)を回復させるメソッドを持ちます。
・すべてのクラスにおいて、フィールドはprivate、メソッドとクラスはpublicとします。
・すべてのクラスにおいて、ゲッターとセッターがあります。
疑問に感じること
javaの参考書で出てきたソースコードが納得いきません。
以下の2点に疑問を感じます。
①他クラスのインスタンス(wand)をWizardクラスがフィールドにもつこと。(ソースコード4行目)
Wizardクラスには他クラスのインスタンスwandがあります。
ここに文法的な違和感があります。
Wandクラスは確かにpublicです。
しかしフィールドはprivateです。
Wizardクラスのフィールドにwandを持てるものなのでしょうか。
その際、ゲッターやセッターを用いなくてよいのでしょうか。
②自分のフィールドにあるwandを取得する際にゲッターを使っていること。(ソースコード10行目)
healメソッド内でwandの値?を取得しています。
wandは確かに他クラス(Wandクラス)のフィールドですが、Wizardクラスのフィールドでもあります。なぜゲッターが必要なのでしょうか。
該当のソースコード
java
1public class Wizard { 2 private int hp; 3 private int mp; 4 private String name; 5 private Wand wand; 6 7 public void heal(Hero h) { 8 int basePoint = 10; 9 int recoverPoint = 10 (int)(basePoint * this.getWand().getPower()); 11 h.setHp(h.getHp() + recoverPoint); 12 System.out.println(h.getName() + "のHPを" + recoverPoint + "回復した!"); 13 } 14 15 public int getHp() { 16 return hp; 17 } 18 19 public void setHp(int hp) { 20 this.hp = hp; 21 } 22 23 public int getMp() { 24 return mp; 25 } 26 27 public void setMp(int mp) { 28 this.mp = mp; 29 } 30 31 public String getName() { 32 return name; 33 } 34 35 public void setName(String name) { 36 this.name = name; 37 } 38 39 public Wand getWand() { 40 return wand; 41 } 42 43 public void setWand(Wand wand) { 44 this.wand = wand; 45 } 46 47}
package sitsumon0627_1; public class Wand { private String name; private double power; public String getName() { return name; } public double getPower() { return power; } public void setName(String name) { this.name = name; } public void setPower(double power) { this.power = power; } }
package sitsumon0627_1; public class Hero { private int Hp; private String name; public int getHp() { return Hp; } public void setHp(int hp) { Hp = hp; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
回答3件
あなたの回答
tips
プレビュー