【发布时间】:2015-11-01 16:01:38
【问题描述】:
我有一个名为 Spell 的抽象类。 Spell 类假设有几个子类,如 DamageSpell、ChangeStatSpell 等。
问题是技术问题 - 在 DamageSpell 类中 - 在声明损坏方法之后 - 它说它找不到 getSpell(java 找不到符号:方法 getSpell()。我该如何解决这个问题?我感谢一个描述如何修复它的代码示例。谢谢。
abstract public class Spell {
private String name;
private int spellLevel;
private int manaCost;
Spell(String name, int spellLevel , int manaCost){
this.name = name;
this.spellLevel = spellLevel;
this.manaCost = manaCost;
}
String getSpellName(){ return name; }
int getSpellLevel() {return spellLevel; }
int getManaCost(){ return manaCost; }
}
public class DamageSpell extends Spell {
private int n;
private int dice;
private int base;
private int stepLevel;
private int maxCasterLevel;
DamageSpell(String name, int spellLevel, int manaCost, int n, int dice, int base, int stepLevel, int maxCasterLevel){
super(name, spellLevel, manaCost);
this.n = n;
this.dice = dice;
this.base = base;
this.stepLevel = stepLevel;
this.maxCasterLevel = maxCasterLevel;
}
static List<DamageSpell> damageSpellsList = new ArrayList<DamageSpell>();
static
{
damageSpellsList.add(new DamageSpell("Magic Missiles", 1, 2, 1, 4, 1, 2, 9));
// damageSpellsList.add(new DamageSpell("Scorching Ray ", 2, 4));
damageSpellsList.add(new DamageSpell("Fireball", 3, 6, 1, 6, 1, 1, 10));
//damageSpellsList.add(new DamageSpell("Ice Storm", 4, 8));
}
public static void damage(String spellName, Character attacker, Character target){
DamageSpell spell = damageSpellsList.getSpell(spellName);
int damage = 0;
int casterLevel = Math.min(attacker.getLevel(), spell.maxCasterLevel);
int totalRolls = (casterLevel-spell.base)%spell.stepLevel;
for (int i = 1; i <= totalRolls ; i++) {
damage += DiceRoller.roll(spell.n, spell.dice);
}
target.setCurrentHp(target.getCurrentHp() - damage);
System.out.println(" You dealt " + damage + " to the enemy");
}
public DamageSpell getSpell(String spellName) {
try {
for (Iterator<DamageSpell> iter = damageSpellsList.iterator(); iter.hasNext(); ) {
DamageSpell spell = iter.next();
if (spellName.equals(spell.getSpellName())) {
return spell;
}
}
} catch (Exception e){
System.out.println(spellName + " haven't been found in spells-list");
return null;
}
return null;
}
}
【问题讨论】: