Java Abstract Class有两个几乎相同的方法

时间:2016-06-15 05:07:03

标签: java methods abstract-class

我创建了一个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扩展抽象类时才进入抽象类?

2 个答案:

答案 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。或者,重新设计以使其适合继承或重新设计以使其使用合成。