Java:继承另一个接口的接口

时间:2018-01-07 21:52:44

标签: java list interface

我目前正在用Java编写游戏。目前我有一个接口有几个方法:getPosX,getPosY,whatAmI(返回对象的枚举类型)并更新。

此界面被所有世界物品扩展为敌人,玩家,宝石(货币)或任何其他世界物品。问题是,虽然敌人和玩家都需要更新方法,但宝石或其他世界物品之类的东西并不需要这种更新方法。由于接口的工作方式类似于契约,因此扩展此接口的类将需要该方法。但是这种方法永远不会用于像宝石这样的东西。对我来说,这很奇怪。我这样做的原因是,我可以将每个世界项目(宝石,玩家,敌人)放入一个世界项目列表中。

我正在审查我的代码,并意识到对于诸如gems之类的东西(即不执行任何操作的更新方法)而言,它可能不是最好的选择,但是我应该有两个接口,例如worldItem然后对于敌人和玩家,我有另一个继承自worldItems的界面。这样,仍然可以将每个世界项目放在一个单独的列表中。这只有一点需要注意。每当我想循环遍历该列表并调用更新方法时,我该怎么做?

如果一个列表包含每个worldItem(包括gem,player和敌人),每当我遍历列表并获得一个作为播放器的worldItem时,我将无法在该元素上调用更新方法。 update方法属于继承树下面的另一个接口。

我的问题是,如果不添加更多代码,我将如何解决此问题?如果不将两个接口分成两个不同的列表(即一个只有玩家和敌人,另一个与其他世界项目),它甚至可能吗?

TL; DR:两个接口,一个接口继承自另一个接口。最低的界面包含敌人和玩家所需的更新方法,而更高级别的界面包含所有世界项目所需的一般方法。

我有一个列表可以连接更高级别的接口,这样所有对象都可以放入一个列表中。当我遍历列表时,我希望能够达到播放器的更新方法(此方法位于较低级别的界面中)。但我也希望访问其他没有更新方法的世界项目,但仍然可以连接更高级别的界面。

我该怎么办?

我将添加继承树的视觉表示和一些伪代码,以进一步突出我的问题'

       Interface WorldItem
       [ getPosX() ]
       [ getPosY() ]
       [ whatAmI() ]
      /            
     /
    V
 Interface MovingObjects extends WorldItem
 [ update() ]


 List<WorldItem> worldItems // arrayList that contains WorldItem (gem) and
                            // MOvingObjects like player and enemy


 for(worldItem worldItem : worldItems)
     if(worldItem.whatAmI == PLAYER)
         worldItem.update()

这就是我想要做的,但显然WorldItem接口没有更新方法,但是更低级别的界面没有,玩家实现

我将如何做到这一点?

0 个答案:

没有答案