有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

接口如何编写对多种对象(Java)具有相同实现的方法?

我正在用Java编写一个(目前)基于字符串的口袋妖怪游戏。根据我的结构,目前有两种对象需要进行类型匹配:口袋妖怪和移动。我想要编写的方法(isStrongAgainst())对于这两种方法都是相同的。例如,一个水型口袋妖怪和一个水型移动对火型口袋妖怪来说是很强大的,但是这些比较可以根据上下文暗示不同的事情。这两个类都有不同的isType()方法实现

我的想法是使用一个接口来实现一个默认的IsStrongAinst()方法,并声明一个抽象的isType()方法。我认为,由于实现此接口的任何类都必须实现isType(),因此我可以在我的isStrongAgainst()中使用它,但我不能。考虑到我的问题,有什么办法可以解决这个问题,或者有更好的建议吗

public interface TypeMatch<T> {
    boolean isType(Type t);
    default boolean isStrongAgainst(Pokemon opponent){
        if(T.isType(Type.NORMAL)){
            return false;
        }
        if(T.isType(Type.WATER)){
            return opponent.isType(Type.FIRE) ||
                    opponent.isType(Type.ROCK) ||
                    opponent.isType(Type.GROUND);
        } //etc...

共 (3) 个答案

  1. # 1 楼答案

    我认为isStrongAgainst()函数可以进一步细化。 最好以这样一种方式来实现isType(),即如果对手比我们弱,它将返回true

    然后可以在函数isStrongAgainst()的返回语句中直接使用它

    最好的

    PS:我现在正在上课,我会在结束后给出更详细的答案,如果可能的话,在那之前试着了解一下我所说的

  2. # 2 楼答案

    你可以:

    1. 将口袋妖怪定义为一个抽象类来实现类型匹配
    2. 将isStrongAgainst(口袋妖怪对手)从TypeMatch移动到口袋妖怪
    3. 任何扩展口袋妖怪的类都有相同的isStrongAgainst(口袋妖怪对手)实现
  3. # 3 楼答案

    据了解,根据口袋妖怪的类型,您的游戏包含不同的行为。我强烈建议您使用strategy design pattern