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
和abstractNimPlayer
类中创建默认构造函数。并将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-您能解释一下吗?