Java如何使用超类构造函数设置子类实例变量

问题描述 投票:0回答:2

我有一个带有两个实例变量colorposition的子类。构造函数接受了这两者。我首先调用包含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);
    }
}

!Here's a picture of debugging information 1

java inheritance constructor superclass
2个回答
0
投票

颜色字段应仅是父类的一部分,而不能在子类中重复。继承大约是shared state,因此颜色将由Rock类型继承,并且将具有公共或受保护的访问权限。


0
投票

非方法成员(字段)根据引用类型进行访问,但是方法根据所引用的对象进行访问。Please see this post for more explanation

© www.soinside.com 2019 - 2024. All rights reserved.