尝试定义多个构造函数时,未定义的类型编译错误

时间:2016-02-04 12:18:21

标签: java

主要课程 - >>>

public class scoreMain {

    public static void main(String[] args) {
        // Football Score board

        Score scoreObject = new Score();
        Score scoreObject1 = new Score(1);
        Score scoreObject2 = new Score(1,2);
        Score scoreObject3 = new Score(1,2,3);

    }
}

和构造函数类 - >>>

public class Score {

    public void Score()
    {
        Score(0,0,0);
    }
    public void Score(int x)
    {
        Score(x,0,0);
    }
    public void Score(int x,int y)
    {
        Score(x,y,0);
    }
    public String Score(int x,int y,int z)
    {
       Score(x,y,z);
       return String.format("%d/%d%d",x,y,z);   
    }
}

但在创建对象时显示错误... 构造函数得分(int)未定义 构造函数得分(int int)未定义 构造函数得分(int int int)未定义

3 个答案:

答案 0 :(得分:4)

构造函数不返回任何内容。不是String也不是void或其他任何内容。您应该按如下方式更改构造函数:

public class Score {

    public Score() {
        this(0,0,0);
    }

    public Score(int x) {
        this(x,0,0);
    }

    public Score(int x,int y){
        this(x,y,0);
    }

    public Score(int x,int y,int z) {
       Score(x,y,z); // Not sure what's this - you can't do a recursive constructor call. Doesn't make any sense
       return String.format("%d/%d%d",x,y,z); // Remove the return statment.
    }
}

另请注意,不仅不对任何值进行返回,而且还要对最后重载的构造函数中的构造函数进行递归调用。它没有任何意义,也不起作用。

BTW - 重载构造函数的正确方法是在重载中调用this()并且只有一个实现。请查看this question了解更多详情。

答案 1 :(得分:1)

在您的代码中,只有方法,没有构造函数。构造函数没有返回类型。

示例:

public class Score {

  public Score()
  {
    this(0,0,0);
  }

  public Score(int x)
  {
    this(x,0,0);
  }

  public Score(int x,int y)
  {
    this(x,y,0);
  }

  public Score(int x,int y,int z)
  {
    //??
    //constructors cannot return anything!
    //return String.format("%d/%d%d",x,y,z);   
  }
}

答案 2 :(得分:0)

另外,要调用同一个类的其他构造函数,您应该使用关键字this,而不是类名。

所以,第一个构造函数看起来像这样

public void Score()
{
    this(0,0,0);
}

此外,你在这里有一个方法,而不是一个构造函数。构造者没有返回类型