【问题标题】:Passing as Sub Class from array of Super Classes从超类数组中作为子类传递
【发布时间】:2014-11-17 14:46:55
【问题描述】:

ProjectilesProjectile 的arrayList。 Projectile 有几个子类,例如 Laser。 这里我试图将一个 Projectile 传递给另一个函数。

  void checkProjectiles() {

    for (int index=0; index<Projectiles.size (); index++) {
      if (sq(Projectiles.get(index).xPos - posX) + sq(Projectiles.get(index).yPos - posY) < sq(size)) { //if within the a circle radius of size from centre of roid
        Projectile checkProjectile = Projectiles.get(index);
        collision(checkProjectile);
      }
    }
  }

我的问题是,当将Laser 的实例传递给此函数时,它没有转到collision(Laser laser),而是转到collision(Projectile projectile)。 如何让对象作为其特定子类的实例传递?

【问题讨论】:

  • 你能不能有一个基类的碰撞方法并在子类中覆盖它。这样你传入的任何子类对象都会调用对应的碰撞方法
  • @dragon66 这就是我真正想做的事情。但我将其作为课堂作业进行,讲师坚持我们使用重载方法来处理此事件。他告诉我要查找“访客困境”
  • 无论如何,当您要为其添加更多子类类型时,建议的答案方式将是一场维护噩梦。

标签: java class processing


【解决方案1】:

您遇到的问题是,就程序而言,Projectiles 中的所有内容都只能作为 Projectile 解决,而不是其任何子类。有几种方法可以处理这个问题,但我认为最简单的方法是在碰撞中处理它。期望得到一个 Projectile 类型的对象,并使用 instanceof 方法将其拆分出来。

有关具有类类型的比较运算符的示例,请参见此答案。 Check if an object belongs to a class in Java

您应该阅读多态性和接口之类的东西,它们也很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-08
    • 2011-04-18
    • 1970-01-01
    • 2010-09-28
    • 2013-02-25
    • 2016-04-21
    • 1970-01-01
    • 2018-03-29
    相关资源
    最近更新 更多