这个IPlayer的run接口函数,后面的实例化,参数上让人很迷惑,因为多余的参数出现了。public interface IPlayer {
public void run(List<Point> enemyPoints, Point point);
}//电脑走一步棋的时候
@Override
public void run(List<Point> enemyPoints, Point p) {
//此地只用到第一个参数,另一个是废弃的
Point p2 = doAnalysis(myPoints, enemyPoints);
myPoints.add(p2);
allFreePoints.remove(p2);
}//人走一步棋的时候
@Override
public void run(List<Point> enemyPoints, Point p) {
//此地只用到第二个参数,另一个是废弃的
myPoints.add(p);
allFreePoints.remove(p);
}

解决方案 »

  1.   

    感觉还好。
    为什么你的电脑走一步棋里面要重新定义一个p2,myPoints又是从那里来的?方法里面的p不可以用么?
      

  2.   

    定义接口的时候,可以重载方法:public interface IPlayer {
        public void run(List<Point> enemyPoints, Point point);
        public void run(List<Point> enemyPoints);}
      

  3.   

    感觉你的实例化的时候有问题,不是接口定义的问题,实例化的时候判断是电脑走还是人走,应该是调用不同的方法,Point p2 = doAnalysis(myPoints, enemyPoints);这个放到你的run方法外面去作,方法内就应该一样了,只需要传一个参数point。
      

  4.   

    [code=Java]public interface IPlayer
    {
        public void run(List<Point> enemyPoints);
        public void run(Point p);
    }[code]
    电脑走棋和人走棋分开定义。