Java 如何使用超级 class 构造函数设置 child class 实例变量
Java how to set child class instance variable with super class constructor
我有一个 child class 和两个实例变量 color
和 position
。构造函数接受这两个。我首先调用包含 setColor(color)
->this.color = color
的 super(color)
构造函数。根据调试工具,这是为超级 class 设置 this.color
而不是调用该方法的 child class。这不是使用超级 class 构造函数设置实例变量的正确方法吗?
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);
}
}
!Here's a picture of debugging information1
颜色字段应该只是父项的一部分 class,而不应在子项中重复。继承约为 shared state
,因此颜色将由 Rock
类型继承,并将具有 public 或受保护的访问权限。
我有一个 child class 和两个实例变量 color
和 position
。构造函数接受这两个。我首先调用包含 setColor(color)
->this.color = color
的 super(color)
构造函数。根据调试工具,这是为超级 class 设置 this.color
而不是调用该方法的 child class。这不是使用超级 class 构造函数设置实例变量的正确方法吗?
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);
}
}
!Here's a picture of debugging information1
颜色字段应该只是父项的一部分 class,而不应在子项中重复。继承约为 shared state
,因此颜色将由 Rock
类型继承,并将具有 public 或受保护的访问权限。