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

Java继承问题:父类运行正常子类调用属性返回null值

问题根因

你的代码出现null值主要是3个核心错误导致:

  • 子类RoomFrontEnd重复定义了和父类Room同名的私有属性roomID、floor:父类的set方法只会给父类的私有属性赋值,子类toString方法读取的是子类自己定义的、从未赋值的同名属性,自然返回null。
  • 房型相关方法签名完全不匹配:父类设置房型的方法名为setRoomType(String)、获取房型的方法名为getRoomType(),你子类写的setRoomTypeID(Integer)、getRoomTypeID()和父类方法完全对不上,既没有正确重写父类方法,参数类型Integer也和你传入的字符串类型房型编码不兼容,导致房型赋值失败返回null。
  • 测试代码调用了不存在的方法:父类并没有定义setRoomTypeID方法,你读取文件后调用room[i].setRoomTypeID(read.next())属于笔误,应该调用父类已有的setRoomType方法。
修复方案
  1. 删除子类RoomFrontEnd中重复定义的roomID、floor属性,这两个字段不需要子类额外处理,直接调用父类的getter方法取值即可。
  2. 修正子类的房型相关方法,和父类方法签名对齐,正确重写父类方法。
  3. 修正子类toString方法,通过父类的getter方法获取roomID、floor的值。
  4. 修正测试代码中的方法名笔误。
修正后代码示例

修正后的子类代码

public class RoomFrontEnd extends Room {
    // 只保留子类需要自定义逻辑的属性
    private String roomType;
    private String roomStatus;

    // 重写父类的setRoomType方法,参数类型改为和父类一致的String
    @Override
    public void setRoomType(String roomTypeID) {
        if (roomTypeID.equals("RT1")) {
            this.roomType = "单人间";
        } else if (roomTypeID.equals("RT2")) {
            this.roomType = "双人间";
        }
    }

    // 重写父类的getRoomType方法,返回转义后的房型名称
    @Override
    public String getRoomType() {
        return this.roomType;
    }

    @Override
    public void setRoomStatus(String roomStatus) {
        if (roomStatus.equals("1")) {
            this.roomStatus = "可用";
        } else if (roomStatus.equals("0")) {
            this.roomStatus = "不可用";
        }
    }

    @Override
    public String getRoomStatus() {
        return this.roomStatus;
    }

    @Override
    public String toString() {
        // 调用父类的getter方法获取不需要转义的字段值
        return getRoomID() + " " + roomType + " 楼层 " + getFloor() + " " + roomStatus;
    }
}

测试代码修正点

把读取文件时的

room[i].setRoomTypeID(read.next());

改为

room[i].setRoomType(read.next());

修改完成后运行即可正常输出所有字段值,不需要把所有getter/setter都搬到子类,符合你使用继承的设计初衷。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:39:00