我可以在不覆盖整个方法的情况下将代码添加到继承的方法吗?
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?
我从抽象 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?