Атрибут строки печати, унаследованный от суперкласса, показывает значение Null

#java #inheritance

Вопрос:

Я расширяю класс и использую ключевое слово super в своих конструкторах подклассов.

Однако, когда я пытаюсь распечатать строку унаследованного атрибута. Он возвращает значение null

 public class Question implements IQuestion, Serializable {

private String question;

public Question(String question){
    this.question=question;
}

@Override
public String getQuestion(){
return question;
 

}

 public class TrueFalseQuestion extends Question implements ITrueFalseQuestion{

String question;
boolean answer;

public TrueFalseQuestion(String question, boolean answer){
    super(question);
    this.answer=answer;  
}

@Override
public String getQuestion(){
return question " True/False?";
}
@Override
public boolean checkAnswer(boolean answer){
    return this.answer==answer;
    
}
}
 

Поэтому, когда я создаю объект TrueFalseQuestion и вызываю его метод getQuestion() ,

Я получаю вывод: null True/False?

Почему он не печатает вопрос, который я передал при создании объекта? Как я могу это исправить?

Спасибо

Комментарии:

1. 1. Удалите question поле из TrueFalseQuestion класса. 2. Измените question " True/False?" на getQuestion() " True/False?"

Ответ №1:

Это связано с областью действия модификатора доступа для родительского и дочернего классов.

В классе Question установите область действия question переменной на что-то менее ограничительное. например

 protected String question;
 

а в дочернем классе TrueFalseQuestion полностью удалите определение переменной, чтобы дочерний элемент ссылался на родительскую переменную.

 String question; // <--- remove this