尝试获取子嵌套静态类的字段值时,获取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
答案 0 :(得分:3)
不要重新声明成员变量。相反,您应该在构造函数中设置值。
public static class Warrior extends Player{
public Warrior() {
type = "Warrior";
hitPoints = 100;
weapon = new Weapon.Sword();
}
}
另一种选择是创建一个GameCahracter
构造函数,该构造函数接受与每个成员变量匹配的参数。
作为旁注:公共成员变量是一个坏主意。
答案 1 :(得分:1)
GameCahracter.name
和GameCahracter.hitPoints
未分配,因此它们保持为空。分配了Warrior.name
和WarriorhitPoints.hitPoints
,但它们是不同的字段。在父级和子级中使用具有相同名称的字段(与方法不同)是一个坏主意。