#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