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

如何避免在每个Java子类中重复编写父类变量与构造方法?

解决方案:子类复用父类属性与构造逻辑

核心思路是在子类构造方法中通过super()调用父类的构造方法,直接复用父类的通用属性初始化逻辑,无需在子类重复定义父类变量和构造代码。

1. 父类Advertisement的正确实现

先确保父类定义好通用属性和对应的构造方法,封装通用逻辑:

public class Advertisement {
    private String id;
    private String description;

    // 初始化通用属性的构造方法
    public Advertisement(String id, String description) {
        this.id = id;
        this.description = description;
    }

    // 按需提供getter方法,用于访问通用属性
    public String getId() {
        return id;
    }

    public String getDescription() {
        return description;
    }
}

2. 子类PrintedAd的实现

子类继承父类后,只需定义自身特有属性,在构造方法第一行通过super(参数)调用父类构造器,完成通用属性初始化,再处理自身属性:

public class PrintedAd extends Advertisement {
    // 子类特有计费/属性字段
    private String printSize;
    private double unitPrice;

    // 子类构造方法:先调用父类构造器初始化通用属性,再初始化自身属性
    public PrintedAd(String id, String description, String printSize, double unitPrice) {
        super(id, description); // 必须放在构造方法第一行
        this.printSize = printSize;
        this.unitPrice = unitPrice;
    }

    // 子类特有业务方法,比如计算印刷广告费用
    public double calculateTotalCost(int printQuantity) {
        return unitPrice * printQuantity;
    }
}

3. 测试示例(Main.java)

public class Main {
    public static void main(String[] args) {
        PrintedAd springAd = new PrintedAd("PRINT_AD_001", "春季新品促销海报", "A3", 6.2);
        System.out.println("广告ID:" + springAd.getId());
        System.out.println("广告描述:" + springAd.getDescription());
        System.out.println("150份印刷费用:" + springAd.calculateTotalCost(150));
    }
}

关键说明

  • 若父类没有无参构造方法,子类必须显式调用带参数的super(),且必须放在子类构造方法的第一行。
  • 后续新增其他广告类型(如网页广告WebAd)时,只需重复上述逻辑:继承Advertisement,调用super()初始化通用属性,再定义自身特有属性和方法即可,完全复用父类代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:30:20