B扩展了A,并且在As列表中,某些索引是B的instanceof。为什么我然后不能用index.Bmethod()调用方法?

时间:2019-03-26 13:31:03

标签: java for-loop interface instanceof

我有一个物品列表,我想从该列表中提取武器物品。武器可以扩展物品,但还有另外一种方法:getBonus(),这会给玩家带来额外的伤害。

现在,我可以使用instanceof轻松提取武器的物品。我通过基于索引的for循环运行它们,如果是武器,我将其检索。但是,我无法在列表中的那个Item元素上调用武器方法,因为instanceof我知道它是武器,因为它的类型是“ Item”而不是“ Weapon”。

我对编码还比较陌生,因此由于缺乏知识,可能有很多我没有尝试过的解决方案。我尝试过类型转换,但没有用。

for(int i = 0; i < backpack.size(); i++) {
    if(backpack.get(i) instanceof Sword) {
    IItem item = backpack.get(i);
    backpack.remove(i);
    equipped = item;
    initialDmg += equipped.getBonus(); 
    checkInventory(game);
    game.formatMessage("You equipped a %s, and now hit for %d dmg!", item.getName(), getDamage());
    }
}

equipped.getBonus();

不起作用,因为设备类型为IItem,而getBonus();方法来自Weapons接口,该接口扩展了IItem接口。 Sword是一个实现Weapons接口的类。

我希望能够从属于武器实例的项目中调用getBonus()方法,但是我不知道该如何使用for循环来做到这一点?

在我看来,这是因为我要遍历的列表由IItem-elements组成。但是,我不能将其更改为仅包含武器元素,因为背包应该能够携带普通物品和武器。如前所述,某些元素是武器。

即使是Weapon实例(在本例中为剑),即使它是Item类型的元素,我也如何才能使索引i的元素使用武器方法呢?

0 个答案:

没有答案