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

Java如何重写方法计算父类私有访问属性replacementYear的值

问题解决方案

现存代码问题梳理

  • 父类Equipment的私有属性replacementYear未提供公共set/get方法,子类无法直接操作该属性
  • 父类定义的抽象方法replacementYear()返回值为void,无法直接返回计算结果,现有子类实现仅打印结果未完成属性赋值
  • 子类BatteryPoweredEquipment的构造方法错误添加了void返回值,不符合Java构造方法语法规则
  • 父类中replacementYear定义为String类型不合理,年份为整数,建议修改为int类型

核心逻辑说明

你不需要在子类中额外创建对象完成计算:子类天然继承父类的公共方法,可直接调用getPurchaseYear()获取采购年份,结合自身属性计算后,通过父类提供的set方法给私有属性replacementYear赋值即可。

修改后代码示例

父类Equipment

//Parent
abstract class Equipment {
    private String make;
    private String model;
    private int purchaseYear;
    // 类型调整为int更符合年份存储需求
    private int replacementYear;
    
    //Constructor for Equipment
    public Equipment() 
    {
        make = " ";
        model = " ";
        purchaseYear = 0;
    }
    
    // 抽象方法定义为返回int直接返回计算结果
    abstract int calculateReplacementYear();

    public String getMake()
    {
        return make;
    }

    public void setMake(String newMake) {
        this.make = newMake;
    }

    public String getModel()
    {
        return model;
    }

    public void setModel(String newModel) {
        this.model = newModel;
    }

    public int getPurchaseYear()
    {
        return this.purchaseYear;
    }

    public void setPurchaseYear(int purchaseYear) {
        this.purchaseYear = purchaseYear;
    }

    // 新增replacementYear的get/set方法
    public int getReplacementYear() {
        return replacementYear;
    }

    public void setReplacementYear(int replacementYear) {
        this.replacementYear = replacementYear;
    }
}

子类BatteryPoweredEquipment

class BatteryPoweredEquipment extends Equipment {
    private int warranty = 0;
    
    // 构造方法移除void返回值
    public BatteryPoweredEquipment()
    {    }
  
    //set & get warranty
    public int getWarranty()
    {
        return warranty;
    }
   
    public void setWarranty(int newWarranty)
    {
        this.warranty = newWarranty;
    }
   
    // 重写抽象方法返回计算后的更换年份
    @Override
    int calculateReplacementYear() {
        int result = warranty + getPurchaseYear();
        // 直接赋值给父类属性
        setReplacementYear(result);
        return result;
    }
   
 }

使用示例

你在启动类中可以直接调用该方法获取结果:

public class TestMain {
    public static void main(String[] args) {
        BatteryPoweredEquipment device = new BatteryPoweredEquipment();
        device.setPurchaseYear(2020);
        device.setWarranty(3);
        // 直接获取计算结果
        System.out.println("更换年份:" + device.calculateReplacementYear());
        // 也可以通过get方法获取已赋值的属性
        System.out.println("更换年份:" + device.getReplacementYear());
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:15:09