我有两个国际象棋类,一个抽象父类 Piece
及其普通子类 Rook
。
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
?
最佳答案
您有两个名为 name
的字段:子类中的字段隐藏父抽象类中的字段。 Rook
的构造函数初始化 Rook
的 name
。然而,继承的getName()
返回的是Piece
中name
的值。如果您删除子类中的该值,它将打印一个非空值(但是您必须将修饰符更改为 protected
):
public abstract class Piece {
...
protected Name name;
protected Color color;
...
}
关于java - 继承的 getter 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32780922/