Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在主类而不是子类中设置构造函数_Java_Class_Constructor_Get_Set - Fatal编程技术网

Java 在主类而不是子类中设置构造函数

Java 在主类而不是子类中设置构造函数,java,class,constructor,get,set,Java,Class,Constructor,Get,Set,在我的代码中,我有一个主类和两个子类: public abstract class Items { public int itemId; public int getItemId() { return itemId; } public void setItemId(int itemId) { this.itemId = itemId; } public Items(int itemID) { s

在我的代码中,我有一个主类和两个子类:

public abstract class Items {
    public int itemId;

    public int getItemId() {
        return itemId;
    }

    public void setItemId(int itemId) {
        this.itemId = itemId;
    }

    public Items(int itemID) {
        setItemId(itemID);
    }
}

 abstract class Equipment extends Items {
    public double attackBonus;
    public double defenceBonus;
    public double speedBonus;

    public String equipItem() {
    return itemName + " has been equiped";
    }
}

class Gathering extends Items {
}

class Creation extends Items {

}
我在主类中获得了构造函数,但它不起作用,但如果我将它们放入收集和创建类中。唯一的问题是,这会导致代码重复,这就是为什么我希望它出现在主类中,但这会导致错误

错误是:
默认构造函数的隐式超级构造函数项未定义。必须定义一个显式构造函数

您的问题不清楚,但需要显式实现构造函数超类包含一个接受一个或多个参数的构造函数:

class Gathering extends Items {

    public Gathering(int itemID) {
        super(itemID);
    }
}

您的问题不清楚,但需要显式实现构造函数。超类包含一个接受一个或多个参数的构造函数:

class Gathering extends Items {

    public Gathering(int itemID) {
        super(itemID);
    }
}

因为您的超类中没有默认构造函数(在Java中是指没有参数的构造函数),所以您的子类不能使用默认构造函数,而在您不指定构造函数时,默认情况下会提供默认构造函数


想想一个整数可能有多少个值。当然,它可以称为超级0,但很难知道它正在发生。如果希望子类默认为3呢?因此,Java不必为此烦恼——如果父类中没有默认值,那么必须在子类中创建自己的构造函数

因为您的超类中没有默认构造函数(在Java中是指没有参数的构造函数),所以您的子类不能使用默认构造函数,而在您不指定构造函数时,默认情况下会提供默认构造函数


想想一个整数可能有多少个值。当然,它可以称为超级0,但很难知道它正在发生。如果希望子类默认为3呢?因此,Java不必为此烦恼——如果父类中没有默认值,那么必须在子类中创建自己的构造函数

有两种方法可以避免重复构造函数。 最简单的方法是使用默认构造函数,然后使用setter:

Gathering g = new Gathering();
g.setItemId(6);
您可以使用一些方法链接将其变成一行:在Items中,添加

然后你可以打电话

Creation c = (Creation) ( (new Creation()) .setTItemId(7) );
但我不知道最后一行有多可读

编辑:

第三种方法使用泛型,但必须删除设备。从

abstract class Item<T extends Item>
然后


有两种方法可以避免重复构造函数。 最简单的方法是使用默认构造函数,然后使用setter:

Gathering g = new Gathering();
g.setItemId(6);
您可以使用一些方法链接将其变成一行:在Items中,添加

然后你可以打电话

Creation c = (Creation) ( (new Creation()) .setTItemId(7) );
但我不知道最后一行有多可读

编辑:

第三种方法使用泛型,但必须删除设备。从

abstract class Item<T extends Item>
然后


它要求我在所有子类中添加一个构造函数现在添加整个代码那么Reimeus是正确的,因为你不能使用默认构造函数,你的子类必须有自己的构造函数,按照Reimeus编写的代码编写。关键是所有的Items实例都需要向其中传递itemID。1+用于编辑,感谢编辑您的问题。所以我真的不能避免在我的所有子类中重复代码?问题是我总共有7-8个类需要ID,这意味着我必须在我所有的类中创建一个构造函数,这看起来非常重复。它要求我在我所有的子类中添加一个构造函数。现在添加整个代码。Reimeus是正确的,因为你不能使用默认构造函数,你的子类必须有自己的构造函数,按照莱默斯的作品写的。关键是所有的Items实例都需要向其中传递itemID。1+用于编辑,感谢编辑您的问题。所以我真的无法避免在我的所有子类中重复代码?问题是我总共有7-8个类需要ID,这意味着我必须在我的所有类中创建一个构造函数,这看起来非常重复。这是我试图避免的,我可以这样做,但我不想把它添加到我的子类中,因为它会导致重复代码。这是我试图避免的,我可以这样做,但我不想把它添加到我的子类中,因为它会导致重复代码。