Недавно я задал вопрос о том, почему все мои переменные в порожденных предметах были установлены на одинаковое значение урона (Java switch statements outputting the same numbers), и этот код не был виноват, однако после некоторой глубокой отладки у меня есть обнаружил, что, когда предмет порожден, он рандомизирует повреждение, а затем по какой-то причине устанавливает, что повреждение каждого ранее созданного элемента того же типа.Неизвестная проблема родительской переменной в java
У меня есть классы «кинжал» и «меч», которые расширяют мой класс «предмет». Это, как я установить повреждение:
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;
}
}
Я не уверен, что эта проблема и не уверен, что Google еще довольно новичок. Я попытался переопределить класс item, но ничего не изменил, и я прочитал о наследовании, и я не понимаю, какая часть устанавливает каждый экземпляр другого оружия одинаковым образом. Я хотел удалить методы в классе «Item», чтобы убедиться, что это исправит, однако другой код, вызывающий ошибки, помешал мне сделать это при проверке и суммировании ущерба всем детям «Item» - для этого требовалось приведение (Item), и я не уверен, что еще я могу использовать в качестве актера.
Вот направления к методу «Item»:
if (((Item) World[k][i].treasure).getDamage() > 9)
{
Без актерского ошибка является: 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.");
}
Что случилось? Я хочу понять это, поэтому ссылки на полезную информацию о том, почему, и что я делаю неправильно, было бы хорошо. Благодарю.
вы знаете, что 'static' на самом деле означает ли? :) –