0

ネストされた子静的クラスのフィールド値を取得しようとすると、null. *1 *横線で区切られた各クラスファイル。子戦士の値を取得するには?


abstract class GameCahracter{

        public String name;

    public String type;

    public Weapon weapon; 

    public int hitPoints;

    public String getDescription(){

        return type + "; " + name + "; " + hitPoints + " hp; " + weapon.type; 
    }

    public static class Warrior extends Player{

        public final String type = "Warrior";

        public int hitPoints = 100;

        public static final  Weapon.Sword weapon = new Weapon.Sword(); 

    }
}

abstract class Player extends GameCahracter {

}

GameCahracter.Warrior wr = new GameCahracter.Warrior();

wr.name = "Joe";

System.out.println( wr.getDescription());

出力:

null; Joe; 0 hp; null
4

2 に答える 2

3

メンバー変数を再宣言しないでください。代わりに、コンストラクター内で値を設定する必要があります。

public static class Warrior extends Player{
    public Warrior() {
      type = "Warrior";
      hitPoints = 100;
      weapon = new Weapon.Sword(); 
    }
}

別のオプションはGameCahracter、各メンバー変数に一致する引数を取るコンストラクターを作成することです。

補足として: public メンバー変数は悪い考えです。

于 2012-04-14T14:25:10.703 に答える
1

GameCahracter.name割り当てられてGameCahracter.hitPoints いないため、null のままです。Warrior.nameWarriorhitPoints.hitPoints割り当てられましたが、それらは異なるフィールドです。親と子で同じ名前のフィールドを持つことは悪い考えです (メソッドとは異なります)。

于 2012-04-14T15:47:56.090 に答える