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

Java继承层级处理异常输出问题求助

问题原因与解决方案

1. 核心逻辑顺序错误

你现在的代码是先调用setPrice,后设置condition和trailer,这直接导致了错误结果:

  • Vehicle构造函数里this.condition = condition;是无效赋值,成员变量condition默认是null
  • Truck构造函数里this.trailer = trailer;也是无效赋值,trailer默认是false

执行setPrice(200)时,this.getCondition() == NEW的判断结果为false(null和任何枚举值都不相等),直接进入else分支计算200 * 0.85 = 170。后续你再设置condition和trailer,但没有重新触发价格计算,所以所有实例的价格都停留在170。

2. 构造函数的初始化bug

两个类的构造函数都存在无效赋值问题,必须修正:

  • Vehicle构造函数需给condition和price设置明确默认值:
public Vehicle() {
    this.id = idcouter++;
    this.condition = Condition.USED; // 按需设置默认状态
    this.price = 0;
}
  • Truck构造函数需给trailer设置明确默认值:
public Truck() {
    super();
    this.trailer = false; // 明确默认无拖车
}

3. 正确的执行顺序

调整代码顺序,先设置condition和trailer,再调用setPrice:

Truck t1 = new Truck();
t1.setCondition(enums.Enums.Condition.NEW);
t1.setTrailer(true);
t1.setPrice(200); // 此时条件正确,执行95折计算

Truck t2 = new Truck();
t2.setCondition(enums.Enums.Condition.NEW);
t2.setTrailer(false);
t2.setPrice(200); // 执行原价计算

Truck t3 = new Truck();
t3.setCondition(enums.Enums.Condition.USED);
t3.setTrailer(true);
t3.setPrice(200); // 执行85折计算

4. 可选优化:属性变更自动更新价格

如果希望修改condition或trailer后自动更新价格,可以在对应的setter中重新触发价格计算,需要先保存原始价格:

public class Truck extends Vehicle {
    private boolean trailer;
    private int originalPrice; // 保存用户输入的原始价格

    // ... 修正后的构造函数 ...

    @Override
    public void setPrice(int price) {
        this.originalPrice = price;
        // 原价格计算逻辑
        if (this.getCondition() == enums.Enums.Condition.NEW) {
            int tempPrice = this.trailer ? (int)(price * 0.95f) : price;
            super.setPrice(tempPrice);
        } else {
            super.setPrice((int)(price * 0.85f));
        }
    }

    public void setTrailer(boolean trailer) {
        this.trailer = trailer;
        setPrice(this.originalPrice); // 变更后重新计算价格
    }

    @Override
    public void setCondition(Condition condition) {
        super.setCondition(condition);
        setPrice(this.originalPrice); // 变更后重新计算价格
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 01:51:26