具有两个几乎相同方法的Java抽象类
我已经创建了一个抽象类,现在将来自两个不同类的代码组合到其中。两个代码相似,但有一行不同。如何创建具有相似部分的抽象方法,但如何区分具有额外代码行的一个类 例如:具有两个几乎相同方法的Java抽象类,java,methods,abstract-class,Java,Methods,Abstract Class,我已经创建了一个抽象类,现在将来自两个不同类的代码组合到其中。两个代码相似,但有一行不同。如何创建具有相似部分的抽象方法,但如何区分具有额外代码行的一个类 例如: public void exampleOneMethod(int number) { ***userChoice = choice - 2;*** while (userChoice.getNumber(number) == 0) { number-- } option = false; } public
public void exampleOneMethod(int number) {
***userChoice = choice - 2;***
while (userChoice.getNumber(number) == 0) {
number--
}
option = false;
}
public void exampleTwoMethod(int number) {
while (userChoice.getNumber(number) == 0) {
number--
}
option = false;
}
public void abstractMethod(int number) {
while (userChoice.getNumber(number) == 0) {
number--
}
option = false;
}
如何将userChoice=choice-2;仅当example1扩展抽象类时,才将其扩展到抽象类?您需要将其扩展为两个单独的其他类,一个有,另一个没有
extend
只用于共享公共代码,如果它不是公共代码,那么它就不适合继承,这就是为什么
要么将额外的操作放入一个抽象方法中,并在那里进行操作,扩展类两次,在一个抽象方法中保留方法为空,要么由两个单独的扩展类实现
exampleOneMethod
。或者,重新设计使其适合继承,或者重新设计使其使用组合。不如改用界面
public interface newInterface {
default void exampleTwoMethod(int number) {
while (userChoice.getNumber(number) == 0) {
number--
}
option = false;
}
default void exampleOneMethod(int number) {
userChoice = choice - 2;
while (userChoice.getNumber(number) == 0) {
number--
}
option = false;
}
}
}
当您想实现此接口时:
例如:
public class exampleOneClass implements newInterface {
public void exampleOneMethod(int number) {
newInterface.super.exampleOneMethod(number)
}
}
例如,第二个:
public class exampleTwoClass implements newInterface {
public void exampleTwoMethod(int number) {
newInterface.super.exampleTwoMethod(number)
}
}
这样做有点尴尬,正如提姆在评论中建议的那样,你可能需要考虑重建你的类层次结构。 有关Java中默认方法的更多信息,请参阅此链接。
你没有。相反,重新设计您的类层次结构,以便example1在不诉诸黑客的情况下获得正确的行为。你可能还想使用接口。如果有人告诉我不要在这个程序中使用接口,这将是我最好的答案。它帮助我找到了一个超出我要求的解决方案。只是将该方法从抽象类中删除,并使用getter来获取所需的变量。