【发布时间】:2020-07-27 23:17:45
【问题描述】:
我有一个包含两个实例变量color 和position 的子类。构造函数接受这两个。我首先调用包含setColor(color)->this.color = color 的super(color) 构造函数。根据调试工具,这是为超类而不是调用该方法的子类设置this.color。这不是使用超类构造函数设置实例变量的正确方法吗?
Rook.java:
public Rook(String color, Position pos) {
super(color);
// at this point this.color == null (for Rook)
initPosition(pos);
}
GenericPiece.java:
public GenericPiece(String color) {
setColor(color);
// at this point this.color == "white" (for GenericPiece)
}
public void setColor(String color) throws InvalidPieceColorError {
if (Color.checkValid(color)) {
this.color = color;
} else {
throw new InvalidPieceColorError(color);
}
}
【问题讨论】:
-
Rook是否也定义了一个名为color的字段?我猜你有一个名为color的阴影字段。不幸的是,您的屏幕截图没有显示足够的代码来确定。你也没有发布一个最小的、可重复的例子。所以我只能猜测。 -
@ElliottFrisch 抱歉缺少信息,Rook 和 GenericPiece 都有相同的 2 个实例变量:颜色和位置
标签: java inheritance constructor superclass