无法获取具有抽象父级的子嵌套类的字段

时间:2012-04-14 14:07:34

标签: java oop

尝试获取子嵌套静态类的字段值时,获取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

2 个答案:

答案 0 :(得分:3)

不要重新声明成员变量。相反,您应该在构造函数中设置值。

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

另一种选择是创建一个GameCahracter构造函数,该构造函数接受与每个成员变量匹配的参数。

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

答案 1 :(得分:1)

GameCahracter.nameGameCahracter.hitPoints未分配,因此它们保持为空。分配了Warrior.nameWarriorhitPoints.hitPoints,但它们是不同的字段。在父级和子级中使用具有相同名称的字段(与方法不同)是一个坏主意。