You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java子类调用继承的父类字符串属性返回null的原因及解决办法

问题原因
  • 子类TrueFalseQuestion中重复声明了和父类同名的question属性,该操作会隐藏父类的同名属性,子类方法中直接调用question时,默认访问的是子类自身声明的属性,而非父类中存储了值的属性。
  • 父类的question属性被private修饰,子类本身无法直接访问该私有属性,只能通过父类提供的公共getQuestion()方法获取值。
  • 你仅在子类构造方法中通过super(question)给父类的question完成了赋值,没有给子类自身声明的question赋值,该属性默认值为null,重写的getQuestion()方法中读取的就是这个未赋值的属性,因此输出结果带null。
修正方案

最优的修正方式是删除子类中冗余的同名question声明,在需要获取问题内容时调用父类已有的公共getter方法即可,修正后的子类代码如下:

public class TrueFalseQuestion extends Question implements ITrueFalseQuestion{
    boolean answer;

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

    @Override
    public String getQuestion(){
        // 调用父类getQuestion方法获取已赋值的问题内容
        return super.getQuestion() + " True/False?";
    }
    @Override
    public boolean checkAnswer(boolean answer){
        return this.answer == answer;
    }
}

如果你出于特殊场景必须保留子类的同名question属性,也可以在子类构造方法中补充对该属性的赋值:this.question = question;,但该方案存在属性冗余定义的问题,不推荐使用。

内容的提问来源于stack exchange,提问作者Dennis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:15:06