我有两个棋类的类,一个抽象父类Piece
及其正常子类Rook
。继承的getter返回null
public abstract class Piece {
public enum Color {
BLACK, WHITE;
}
public enum Name {
KING, ROOK, BISHOP, QUEEN, KNIGHT, PAWN,
FERZ, WAZIR
}
private Name name;
private Color color;
public Piece(Color color) {
this.color = color;
}
public Name getName() {
return this.name;
}
-
public class Rook extends Piece {
private Name name;
private Color color;
public Rook(Color color) {
super(color);
this.name = Name.ROOK;
}
}
然后我在另一个类中使用Rook
:
new Rook(Piece.Color.BLACK).getName() //null
new Rook(Piece.Color.BLACK).getColor() //BLACK
为什么getName()
回报null
?
因为你不能覆盖变量,你可以隐藏它们。 'Piece'类范围内的'getName'方法对'Rock'类中的变量'name'没有任何线索。因为你从来没有在'Piece'中设置'name',所以你得到的是空值。 – SomeJavaGuy
在'Piece'中添加'protected'' setName'方法,从'Rook'中删除名称字段,也许还会添加一个'Piece'构造函数,让您直接设置名称(和颜色)。也作为一般提示:要么使用Piece的子类,要么使用枚举,而是使用两者,并且具有1对1的关系是没有意义的。 – hoijui