実現したいこと
・子クラスのフィールド更新を親クラスのgetterに反映させたい。
前提
親クラスでフィールドの値の何個かを一気に取ってくるgetterがあります。子クラスにも親クラス同様のフィールドがあり、それを子クラス内で更新し最後に親クラスのgetterでコンソールに出力したいです。
ただ、親クラスのgetterをそのまま使うとフィールド更新前の値が出力されます。子クラスに同じメソッドを実装すれば問題なく出力されるのですが、なぜ親クラスのgetterではフィールド更新前の値を出力してしまうのでしょうか。
(例)
TypeScriptで●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
親クラスのgetterを使ったときの出力: <<ステータス>>: character:unknown/ trainer: wild/ name: noname/ atk: 90/ def: 60/ spd: 60/ lv: 6 子クラスに同じgetterを実装した時の出力: <<ステータス>>: character:unknown/ trainer: satoshi/ name: pikachu/ atk: 15/ def: 10/ spd: 10/ lv: 1
該当のソースコード
Main.java
1package work; 2 3public class Main { 4 5 public static void main(String[] args) { 6 // TODO 自動生成されたメソッド・スタブ 7 8 Monster2 ms2 = new Monster2("satoshi", "pikachu", 6); 9 System.out.println(ms2.getStatus()); 10 11 12 13 14 } 15 16 17 18} 19
Monster1.java
1//親クラス// 2public class Monster1 { 3 4 String character = "unknown"; 5 String trainer = "wild"; 6 String name = "noname"; 7 int lv = 1; 8 int hp = 80; 9 int atk = 15; 10 int def = 10; 11 int spd = 10; 12 int hpMax = 80; 13 String wazaNm = "たいあたり"; 14 String wazaDmgRate = "1.0"; 15 16 17 public String toString() { 18 19 return "<<フィールド確認>> character: " + character +"/ trainer: " + trainer + "/ name: " + name; 20 } 21 22 public void levelUp(int upLevel) { 23 24 lv += upLevel; 25 hpMax += upLevel * 30; 26 atk += atk * 5; 27 def += def * 5; 28 spd += spd * 5; 29 hp = hpMax; 30 31 32 } 33 34public String getStatus() { 35 String status = "<<ステータス>>: character:" + this.character+ "/ trainer: " + trainer + "/ name: " + 36 name + "/ atk: " + this.atk + "/ def: " + this.def + "/ spd: " + this.spd + "/ lv: " + 37 this.lv ; 38 return status; 39 } 40 41
Monster2.java
1package work; 2 3//子クラス// 4 5public class Monster2 extends Monster1 { 6 7 String character; 8 String trainer; 9 String name; 10 int lv; 11 int hp ; 12 int atk; 13 int def; 14 int spd; 15 int hpMax; 16 String wazaNm; 17 String wazaDmgRate; 18 19 Monster2(){ 20 character = "unknown"; 21 trainer = "wild"; 22 name = "noname"; 23 lv = 1; 24 hp = 80; 25 atk = 15; 26 def = 10; 27 spd = 10; 28 hpMax = 80; 29 wazaNm = "たいあたり"; 30 wazaDmgRate = "1.0"; 31 } 32 33 Monster2(String trainer,String name){ 34 this(); 35 System.out.println(this.name +"/ "+ this.trainer); 36 this.trainer = trainer; 37 this.name = name; 38 System.out.println(this.name + "/ "+ this.trainer); 39 } 40 41 Monster2(String trainer,String name, int firstLv){ 42 this(trainer,name); 43 System.out.println(this.getStatus()); 44 if(firstLv > 1) { 45 this.levelUp(firstLv-1); 46 } 47 }
試したこと
補足情報(FW/ツールのバージョンなど)
openjdk 17.0.6 2023-01-17
eclipseヴァージョン: Version: 2021-12 (4.22.0)
0 コメント