具有两个几乎相同方法的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来获取所需的变量。