我创建了一个Abstract类,现在将两个不同类的代码组合到其中。两个代码都相似,但有一个行差异。如何使用相似的部分创建Abstract方法,但区分具有额外代码行的一个类?
例如:
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扩展抽象类时才进入抽象类?
答案 0 :(得分:2)
如果尝试使用interface
呢?
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)
}
}
执行此操作有点尴尬,正如Tim在评论中建议的那样,您可能需要考虑重建类层次结构。
有关Java中默认方法的更多信息,请参阅此链接。 https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html
答案 1 :(得分:1)
您需要将其扩展为两个单独的其他类,一个用于,另一个没有。 extend
仅用于共享公共代码,如果它不是公共代码,那么它不是适合继承的实现,这就是composition is generally favored over inheritance的原因。
将额外的操作放入抽象方法并在那里进行,将类扩展两次并将方法留空,或者仅由两个单独的扩展类实现exampleOneMethod
。或者,重新设计以使其适合继承或重新设计以使其使用合成。