微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以在不覆盖整个方法的情况下向继承的方法添加代码吗?

如何解决我可以在不覆盖整个方法的情况下向继承的方法添加代码吗?

我从抽象类 X 继承了一个公共方法,但我不想覆盖该方法来复制和粘贴整个内容添加另外两行代码,我只想使用已经存在的代码抽象类无需重新编写,只需编写额外的两行。我已经编写 Java 一个多月了,但到目前为止我还没有找到解决方法,这可能吗?

这是抽象类中的方法

public UsineOrganisme copieAUsine() {
    UsineOrganisme usine = new UsineOrganisme();
    usine.setNomEspece(this.nomEspece);
    usine.setEnergieEnfant(this.energieEnfant);
    usine.setBesoinEnergie(this.besoinEnergie);
    usine.setEfficaciteEnergie(this.efficaciteEnergie);
    usine.setResilience(this.resilience);
    usine.setFertilite(this.fertilite);
    usine.setAgeFertilite(this.ageFertilite);
    usine.setDebrouillardise(this.debrouillardise);

    //Ajouter les aliments de l'espèce
    for (String especeComestible : this.getAliments()) {
        usine.addaliment(especeComestible);
    }
    return usine;
}

而且我希望我在普通类中继承的方法相同,但在返回“usine”之前添加这两行。

public UsineOrganisme copieAUsine() {
    //Same Code but adding these two setters
    usine.setVoraciteMin(this.voraciteMin);
    usine.setVoraciteMax(this.voraciteMax);

    return usine;
}

解决方法

是的,就您而言,您只需调用超级实现:

@Override
public UsineOrganisme copieAUsine(){
    UsineOrganisme usine = super.copieAUsine();

    usine.setVoraciteMin(this.voraciteMin);
    usine.setVoraciteMax(this.voraciteMax);

    return usine;
}
,

是的,在此方法不是final的情况下,使用 super.methodName() 结构是可能的。例如,您可以按如下方式覆盖 ArrayList预定义方法

List<Integer> list = new ArrayList<>() {
    @Override
    public boolean add(Integer integer) {
        // custom action
        integer += 1;
        System.out.println("Add number: " + integer);
        // predefined action
        return super.add(integer);
    }
};
list.add(3);
System.out.println("List contents: " + list);

输出:

Add number: 4
List contents: [4]

另见:Is it possible to override a method comment but not the method?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。