最近我问了一个问题,为什么我在生成的元素中的所有变量都被设置为相同的伤害值(Java switch statements outputting the same numbers)并且该代码不是罪魁祸首,但是经过一些深入的调试后我发现当一个生成元素时它会随机化伤害,然后出于某种原因将伤害设置为每个先前创建的相同类型的元素。
我有扩展我的“项目”类的“ Dagger ”和“剑”类。这是我设置伤害的方式:
case 3: {Sword sword = new Sword(); World[X][Y].treasureName = "sword"; sword.setDamage(4); returnItem = sword; break;}
这是我的元素类别:
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;
}
}
还有我的剑术课:
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;
}
}
我不确定这个问题叫什么,也不确定要用谷歌搜索什么仍然是相当新的。我试图覆盖项目类,但这并没有改变任何东西,我已经阅读了有关继承的内容,但我不明白是哪一部分将所有其他武器实例设置为相同的伤害。我想删除“Item”类中的方法以查看是否可以修复它,但是其他导致错误的代码阻止我在检查和添加“Item”的所有子项的损坏时执行此操作 - 这需要强制转换的(项目),我不确定我还能用什么作为 Actor 。
以下是对“Item”方法的引用:
if (((Item) World[k][i].treasure).getDamage() > 9)
{
如果没有转换,错误是:getDamage() undefined object 类型。 和:
//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.");
}
怎么了?我想了解这一点,因此链接到有关原因和我做错了什么的有用信息会很好。谢谢。
最佳答案
static int damage = 0;
拥有静态成员意味着该类的所有对象都具有相同的值。如果删除 static
关键字,每个对象都可以有不同的伤害值。
至于所需的类型转换,似乎World
是 Object
的数组类型。因此World[k][i]
属于 Object
类型,你只能调用基类的方法 Object
上课。如果要调用 Item
中定义的方法类,你必须投 Object
到Item
(假设 Object
的运行时类型是 Item
)。
关于java - java中未知的父变量问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29666115/