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

Can I add code to an inherited method without overriding the whole method?

我从抽象 class X 中继承了一个 public 方法,但与其重写复制和粘贴整个内容的方法并再添加两行代码,我会喜欢只使用已经在摘要 class 中的代码,而不用重新写一遍,只写额外的两行。我已经编码 Java 一个多月了,到目前为止我还没有找到解决这个问题的方法,这有可能吗?

这是抽象里面的方法class:

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;
}

而且我希望我在正常 class 中继承的方法相同,但在返回“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?