java在第二类中找不到构造函数

标签 java class constructor compiler-errors

我有一个 SimpleBoard 类,它由 Land 扩展,然后由 Units 扩展。每当我尝试编译 Units 时,都会收到此错误:

cannot find symbol
symbol  : constructor Land()
location: class Land
    public Units(int x, int y){

想想哪里出了问题?

编辑:抱歉,我很着急!完整代码如下:

public class Units extends Land{

    private int attack;

    public Units(int x, int y) {

        if(x==1){
            attack = 1;
        }
        else if(x==2)
            attack = 2;
        else if(x==3)
            attack = 4;
        ar[y].AddUnit(this);
    }

    public int getAttack(){
        return attack;
    }
    }

和土地

public class Land extends SimpleBoard {
    private boolean barrel = false;
    private boolean crown = false;
    private boolean castle = false;
    private boolean stronghold = false;
    private int num;
    private int array = 0;
    public int[] adjacent;
    private Units [] Occupy = new Units [4];

    public Land(int z, int x, int c, int v, int b, int[] array){
        if(z == 1)
            barrel = true;
        if(x == 1)
            crown = true;
        if(c == 1)
            castle = true;
        if (v==1)
            stronghold = true;
        num = b;
        adjacent = array;
    }

    public void addUnit(Units x){
        Occupy[array] = x;
        array++;
    }

    public boolean checkB(){
        return barrel;
    }


    public int getAdj(int i){
        return adjacent[i];
    }
    }

还有主板

public class SimpleBoard {
    public static Land[] ar = new Land[3];
    public static void main(String[] args){
    Land One = new Land(1,0,0,0,1, new int[]{2, 3});
    Land Two = new Land(0,1,0,0,2, new int[]{1, 3});
    Land Three = new Land(0,0,1,0,3, new int[]{1, 2});
    ar[0] = One;
    ar[1] = Two;
    ar[2] = Three;

    Units Footman = new Units(1, 1);
    Units Knight = new Units(2, 3);
    Units Siege = new Units(3, 2);

    }
    }

最佳答案

您可以将您的 UnitsLand 类别更改为以下类别:

public class Units extends Land {

    private int attack;

    public Units(int z, int x, int c, int v, int b, int[] array) {
        super(z, x, c, v, b, array);
    }

    public Units(int x, int y) {

        if (x == 1) {
            attack = 1;
        } else if (x == 2) {
            attack = 2;
        } else if (x == 3) {
            attack = 4;
        }
        ar[y].addUnit(this);
    }

    public int getAttack() {
        return attack;
    }
}

public class Land extends SimpleBoard {

    // Declared variable

    public Land(int x, int y) {

    }

    // Rest of the code...
}

由于继承,您将在 Units 类中声明的构造函数也必须存在于 Land 类中。

Land 类中添加一个名为 Land(int x, int y) 的构造函数,内部不包含任何代码(只是一个空白构造函数),以便消除错误在您的 Units 类中。这不是最好的做法,因为我不知道你想做什么。如果您赶时间,可以尝试一下这个,但如果您有时间,请简要说明您的申请目的。

更新:

SimpleBoardGame.java

public class SimpleBoardGame {

    private static Land[] ar = new Land[3];

    public static Land[] getAr() {
        return ar;
    }

    public static void main(String[] args) {
        Land One = new Land(1, 0, 0, 0, 1, new int[]{2, 3});
        Land Two = new Land(0, 1, 0, 0, 2, new int[]{1, 3});
        Land Three = new Land(0, 0, 1, 0, 3, new int[]{1, 2});
        ar[0] = One;
        ar[1] = Two;
        ar[2] = Three;

        // When you pass the parameter for 'y' please make sure it already minus by one.
        // If not, will occur the 'java.lang.ArrayIndexOutOfBoundsException'
        Unit Footman = new Unit(1, 0);
        Unit Knight = new Unit(2, 2);
        Unit Siege = new Unit(3, 1);

    }
}
<小时/>

Land.java

public class Land {

    // For boolean variable, no need to set the value as "false" since it default is "false".
    private boolean barrel;
    private boolean crown;
    private boolean castle;
    private boolean stronghold;
    private int num;
    private int array = 0;
    public int[] adjacent;
    private Unit[] Occupy = new Unit[4];

    public Land(int x, int y) {
        // Empty constructor...
    }

    public Land(int z, int x, int c, int v, int b, int[] array) {
        if (z == 1) {
            barrel = true;
        }
        if (x == 1) {
            crown = true;
        }
        if (c == 1) {
            castle = true;
        }
        if (v == 1) {
            stronghold = true;
        }
        num = b;
        adjacent = array;
    }

    public void addUnit(Unit x) {
        Occupy[array] = x;
        array++;
    }

    public boolean checkB() {
        return barrel;
    }

    public int getAdj(int i) {
        return adjacent[i];
    }
}
<小时/>

Unit.java (从 Units.java 更改为 Unit.java)

public class Unit extends Land {

    private int attack;

    public Unit(int z, int x, int c, int v, int b, int[] array) {
        super(z, x, c, v, b, array);
    }


    public Unit(int x, int y) {
        super(x, y);

        if (x == 1) {
            attack = 1;
        } else if (x == 2) {
            attack = 2;
        } else if (x == 3) {
            attack = 4;
        }

        addUnit(y);
    }

    /**
     * Overload method of the addUnit() of Land class.
     * Better not use "this" inside the constructor.
     * 
     * @param y
     */
    public final void addUnit(int y) {
        SimpleBoardGame.getAr()[y].addUnit(this);
    }

    public int getAttack() {
        return attack;
    }
}

注意:如果您想访问 main 中的变量,请确保您没有继承 SimpleBoardGame 作为 Land 类中的主类类只是为此创建 setter 和 getter。您可以像这样访问 SimpleBoardGame.getAr()[y].addUnit(this); (请参阅 Unit< 中的方法 addUnit(int y) 内部 类。

关于java在第二类中找不到构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11731617/

相关文章:

java - 如何让 printf %x 类似于 python

java - 在 Android 中使用 Mapbox SDK 绘制圆

c++ - OOP 设计 - 从具有通用类型的容器继承

java - Stackoverflow 是由简单的代码引起的

java - 在不修改原始源代码的情况下扩展访客模式?

java - 如何在 JNI 中创建具有新作用域的新 Java 对象

c++ - 尝试调用成员函数指针将不起作用

c++ - 在不同的命名空间中调用别名声明的基类构造函数

c++ - 关于类定义的问题

java - 显示错误的时差