jiankeabcd
jiankeabcd
2016-06-03 13:32

JAVA 关于 cannot resolve method

写一个打怪兽的小程序,需要将MonsterBattle3改动一下使得它可以使用定义的接口

提示 Battleable的接口只定义了receiveDamage的method,只有这个可见。
receiveDamage中,checkStatus 的method也被呼出,但Battleable interface中没有指定
hitPoint是instance,没有在interface中声明。
直接呼出将会被检查,接下来只要确定呼出的method

我直接从日语翻译过来的。。。所以很奇怪。
我也看不懂他想表达什么

hitPointフィールドもインタフェースでは宣言されていない。直接呼
出すメソッドが可視かどうかだけがチェックされ、あとは呼び出されたメソッドが動作すればよいのです。

 public class MonsterBattle3 {


    public static void main(String[] args) {
        Monster[] monsterArray = new Monster[3]; // 書き換えた。

        monsterArray[0] = new Slime();

        int power = 5;
        for (int n = 1; n <= 10; n++) {
            System.out.println("% Start Round " + n + "!");
            for (int i = 0; i < 3; i++) {
                monsterArray[i].receiveDamage(power); // (1)
            }
        }
    }
}

 public abstract class Monster {

    String name;
    int hitPoint;  // or health point
    String status = "active"; // hitPoint <= 0で"killed"になる。


    public boolean checkStatus() {
        if (hitPoint <= 0) {
            System.out.println(name + " was killed.");
            status = "killed";
            return false;  // killedになったときにfalseを返す。
        } else {
            return true;  // activeならtrueを返す。
        }
    }
}

 public class Slime extends Monster implements Battleable{
    // Constructor
    Slime() {
        name="Slime";
        hitPoint=50;
        System.out.println(name + "が現れた!");
    }

    public void receiveDamage(int p) {
        if(status.equalsIgnoreCase("active") ) {  // activeのときだけ戦う。
            int damage= p*5;
            hitPoint = hitPoint - damage;
            checkStatus();
        }
    }
}
 public interface Battleable {
    void receiveDamage(int p);
}

修改MonsterBattle3使其可以执行并不报错
可能没人看得懂要做什么。。。
可是我真的不知道应该怎么办

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

2条回答