javaを勉強中のものです。
配列に格納したインスタンスフィールドの値について分からないことがあります。
java
1public abstract class Character1 { 2 3 private String name; 4 5 private int hp; 6 7 public abstract void attack(Matango m); 8 9 public abstract void run(); 10 11 public String getName() { 12 13 return this.name; 14 15 } 16 17 public int getHp() { 18 19 return this.hp; 20 } 21 22 public void setName(String name) { 23 24 this.name = name; 25 } 26 27 public void setHp(int hp) { 28 29 this.hp = hp; 30 31 } 32 33 34}
java
1public class Hero extends Character1 { 2 3 String name = "ミナト"; 4 int hp = 100; 5 6 //戦う 7 public void attack(Matango m) { 8 9 System.out.println(this.name + "の攻撃!" ); 10 m.hp -= 5; 11 12 System.out.println("5ポイントのダメージ"); 13 } 14 15 //逃げる 16 17 public void run() { 18 19 System.out.println(this.name + "は逃げ出した!"); 20 21 22 } 23 24 void sleep(){ 25 26 this.hp = 100; 27 28 System.out.println(this.name + "は、眠って回復した。!"); 29 } 30 31 32 33 34}
java
1public class Test { 2 3 public static void main(String[] args) { 4 5 Character1[] c = new Character1[5]; 6 7 c[0] = new Hero(); 8 9 c[1] = new Hero(); 10 11 c[2] = new Thief(); 12 13 c[3] = new Wizard(); 14 15 c[4] = new Wizard(); 16 17 System.out.println(c[0].getHp()); 18 19 for (Character1 ch : c ) { 20 21 ch.setHp(ch.getHp() + 50); 22 } 23 24 25 26 27 } 28 29 30} 31
java
1public class Thief extends Character1 { 2 3 private String name = "Thief"; 4 5 private int hp = 50; 6 7 public void attack(Matango m) { 8 9 System.out.println(this.name + "の攻撃!" ); 10 m.hp -= 5; 11 12 System.out.println("5ポイントのダメージ"); 13 } 14 15 //逃げる 16 17 public void run() { 18 19 System.out.println(this.name + "は逃げ出した!"); 20 21 } 22 23 24}
上記のTest.javaにおきましては、配列「c」に5つのインスタンスを格納していると解釈しているのですが、配列にインスタンスを全て格納した後に、「System.out.println(c[0].getHp());」とすると、「0」が出力されます。ここで分からない部分なのですが、Heroクラスにおいて、「int hp = 100」とCharacterクラスのフィールドをオーバーライドしています。ですので、c[0]に格納されているインスタンスの「hp」は、「100」になると思うのですが、何故「0」が出力されるのでしょうか...?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/02 08:19