Java - 调用构造函数 - 编译器错误

时间:2015-09-29 14:20:02

标签: java

这是我的field.java课程。我已经在这里定义了public Field(String name, int number)

public class Field 
{
    String name;
    int number; 

public Field(String name, int number){
    this.name = name;
    this.number = number;
}

public String getName() {
    return name;
}

public int getNumber() {
    return number;
}

@Override
public String toString() {
    return "Field{" + "name=" + name + ", number=" + number + '}';
}


}

以下是我的Player.java课程,我在Field currentField = new Field();上收到错误 - 它说我的字段未在Field.java类中定义为构造函数

public class Player 
{
    private String name;
    private int pos;
    Field currentField = new Field();




    public Player()
    {

    }
}

任何人都有关于为什么我会抛出错误的建议?

4 个答案:

答案 0 :(得分:4)

您在班级

中提供了参数化构造函数
public Field(String name, int number){
    this.name = name;
    this.number = number;
}

因此,在定义参数化构造函数时,不会提供默认(无参数)构造函数。

因此,当您尝试使用Field currentField = new Field();创建实例时,由于没有匹配的构造函数,因此无法编译。

您可以尝试的解决方案:

<强> 1。 在您的班级中添加一个无参数构造函数:

public Field()
{

}

<强> 2。 在创建实例时,将值传递给constrcutor:

Field currentField = new Field("abc", 123);

答案 1 :(得分:2)

是的,因为您的类接收两个参数名称和编号,并且您尝试创建它的实例而不传递它们。

你可以传递它们

 Field currentField = new Field("test", 1); // for ex : 

或为Field类创建一个默认的无参数构造函数。

/** default no arg constructor **/

public Field(){

// TODO : when there is no param 

}

答案 2 :(得分:0)

Field currentField = new Field();

您没有将任何参数传递给构造函数。您需要提供名称和编号作为参数,或者定义默认构造函数:

public Field(String name, int number){
    this.name = name;
    this.number = number;
}

Field currentField = new Field("fieldName", 1);

public Field(){
    this.name = "";
    this.number = 0;    
}

Field currentField = new Field();

答案 3 :(得分:0)

在每个Java类中都有一个默认构造函数,如果添加任何其他构造函数,它将覆盖默认构造函数。因此,要使代码工作,您必须不添加参数构造函数。

public Field(){
}