我有兩個棋類的類,一個抽象父類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