我有一个带有两个实例变量color
和position
的子类。构造函数接受了这两者。我首先调用包含super(color)
-> setColor(color)
的this.color=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);
}
}
颜色字段应仅是父类的一部分,而不能在子类中重复。继承大约是shared state
,因此颜色将由Rock
类型继承,并且将具有公共或受保护的访问权限。
非方法成员(字段)根据引用类型进行访问,但是方法根据所引用的对象进行访问。Please see this post for more explanation