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构造函数,它接受与每个成员变量匹配的参数。

作为旁注:公共成员变量是一个坏主意。

于 2012-04-14T14:25:10.703 回答
1

GameCahracter.name并且GameCahracter.hitPoints 没有被分配,所以它们保持为空。Warrior.name并被WarriorhitPoints.hitPoints分配,但它们是不同的字段。在父项和子项中使用相同名称的字段是一个坏主意(与方法不同)。

于 2012-04-14T15:47:56.090 回答