Java 构造函数不能应用于给定类型

Java 构造函数不能应用于给定类型,java,Java,我将我的项目上载到服务器,发现一个错误。程序运行正常,即使有错误。 我很困惑,想知道为什么。Testable是一个接口,我不能向它添加构造函数 NimPlayer是一个抽象类 感谢您的帮助 Tester.java:12: error: constructor NimAIPlayer in class NimAIPlayer cannot be applied to given types; Testable player = new NimAIPlayer();

我将我的项目上载到服务器,发现一个错误。程序运行正常,即使有错误。 我很困惑,想知道为什么。
Testable
是一个接口,我不能向它添加构造函数

NimPlayer
是一个抽象类

感谢您的帮助

Tester.java:12: error: constructor NimAIPlayer in class NimAIPlayer cannot be applied to given types;
        Testable player = new NimAIPlayer();
                          ^
required: String,String,String
found: no arguments
以下是可测试的
接口:

public interface Testable {
    public String advancedMove(boolean[] available, String lastMove);
}
下面是
NimPlayer
抽象类的一部分:

abstract class NimPlayer extends Nimsys implements Serializable  {

    private String userName;
    private String familyName;
    private String givenName;
    private int gamesPlayed;
    private int gamesWon;

   public NimPlayer(String userName, String familyName, String givenName) {

        this.userName = userName;
        this.familyName = familyName;
        this.givenName = givenName;
        this.gamesPlayed = 0;
        this.gamesWon = 0;
    }
    // getters and setters
}
编辑

这是
NimAIPlayer

public class NimAIPlayer extends NimPlayer implements Testable{

    private int stoneTaken;

    public int moveStone(int initialStone, int upperBound, int stoneBalance) {

        if (stoneBalance != 1) {
            stoneTaken = (stoneBalance - 1) % (upperBound + 1);
            return stoneTaken;
        } else {
            stoneTaken = ThreadLocalRandom.current().nextInt(1, upperBound + 1);
        }

        return -1;
    }

    public NimAIPlayer(String userName, String familyName, String givenName) {
        super(userName, familyName, givenName);//pass the NimAIPlayer to the parent class
    }

    public String advancedMove(boolean[] available, String lastMove) {
        // the implementation of the victory
        // guaranteed strategy designed by you
        String move = "";

        return move;
    }   
}
编辑2

现在我知道默认构造函数是做什么的了。
NimAIPlayer
和abstract
NimPlayer
类中创建默认构造函数。并将
super()
放入子类中,即
NimAIPlayer

一旦声明了一个具有多个参数的构造函数,如果要调用它,还必须提供一个默认的无参数构造函数:

public NimPlayer(){
    super();
}

在类中参数化构造函数时,必须定义默认构造函数。当您没有任何参数化构造函数时,JVM会提供默认构造函数

添加默认构造函数,如下所示

abstract class NimPlayer extends Nimsys implements Serializable  {

private String userName;
private String familyName;
private String givenName;
private int gamesPlayed;
private int gamesWon;

public NimPlayer(){
 }

public NimPlayer(String userName, String familyName, String givenName) {

    this.userName = userName;
    this.familyName = familyName;
    this.givenName = givenName;
    this.gamesPlayed = 0;
    this.gamesWon = 0;
}
// getters and setters
}

而且OP似乎正在将程序提交到一个测试环境,该环境要求无参数构造函数可用。@chrylis onstrike-您能解释一下吗?