最近我问了一个问题,为什么我生成的项目中的所有变量都被设置为相同的损坏值(Java switch语句输出相同的数字)并且代码不应该受到责备,但经过一些深度调试后我发现当一个项目产生它随机化损害然后由于某种原因设置对每个先前创建的相同类型的项目的损害.
我有'匕首'和'剑'课程,扩展了我的'项目'课程.这就是我设置伤害的方法:
case 3: {Sword sword = new Sword(); World[X][Y].treasureName = "sword"; sword.setDamage(4); returnItem = sword; break;}
Run Code Online (Sandbox Code Playgroud)
这是我的项目类:
public abstract class Item {
//How much damage is added to the players attack.
static int damage = 0;
static int defence = 0;
public int getDefence() {
return defence;
}
public void setDefence(int defenceValue) {
defence = defenceValue;
}
public int getDamage() {
return damage;
}
public void setDamage(int damageValue) {
damage = damageValue;
}
}
Run Code Online (Sandbox Code Playgroud)
我的剑类:
public class Sword extends Item {
//How much damage is added to the players attack.
static int damage = 0;
static int defence = 0;
public int getDefence() {
return defence;
}
public void setDefence(int defenceValue) {
defence = defenceValue;
}
public int getDamage() {
return damage;
}
public void setDamage(int damageValue) {
damage = damageValue;
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定这个问题叫什么,也不确定谷歌还有什么相当新的.我试图覆盖项目类,但没有改变任何东西,我已经阅读了关于继承,我不明白哪个部分将每个其他武器实例设置为相同的损害.我想删除'Item'类中的方法以查看是否会修复它,但是其他导致错误的代码阻止我在检查并添加'Item'的所有子项的损坏时这样做 - 这需要一个强制转换(项目),我不知道我可以用什么作为演员.
以下是"项目"方法的推荐:
if (((Item) World[k][i].treasure).getDamage() > 9)
{
Run Code Online (Sandbox Code Playgroud)
如果没有强制转换,则错误为:对于Object类型,未定义getDamage().和:
//Recalculates the players damage for recently equipped items.
for (int i = 0; i < numItems; i++) {
itemdamage += items[i].getDamage();
System.out.println("You have a " + itemNames[i] + " giving you " + items[i].getDamage() + " extra damage.");
}
Run Code Online (Sandbox Code Playgroud)
怎么了?我想理解这一点,所以链接到有用的信息为什么,以及我做错了什么会很好.谢谢.
static int damage = 0;
Run Code Online (Sandbox Code Playgroud)
拥有静态成员意味着该类的所有对象具有相同的值.如果删除static关键字,则每个对象都可以具有不同的损坏值.
至于所需的演员表,它似乎World是一个Object类型的数组.因此World[k][i]是Object类型,您只能Object在其上调用基类的方法.如果要调用Item类中定义的方法,则必须将其Object转换为Item(假设运行时类型Object为a Item).