Java как установить переменную экземпляра дочернего класса с помощью конструктора суперкласса - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть дочерний класс с двумя переменными экземпляра 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);
    }
}

! Вот изображение отладочной информации 1

1 Ответ

1 голос
/ 15 апреля 2020

Цветовое поле должно быть только частью родительского класса, а не дублироваться внутри дочернего класса. Наследование составляет около shared state, поэтому цвет будет наследоваться типом Rock и будет иметь публичный c или защищенный доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...