区分构造函数中的子类

时间:2014-11-11 13:39:05

标签: java class constructor processing subclass

我正在使用Processing API for java制作一个程序。 我希望能够将对象传递给类构造函数,并根据对象所属的子类发生不同的事情。我希望通过使用重载的构造函数来实现这一点。

在此代码中,Asteroid类检查Projectiles arrayList中的每个对象,看它是否与小行星发生碰撞。

      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

        Collision newCollision;
        newCollision = new Collision(Projectiles.get(index), this);
      }
    }
  }

这是我的Collision类的当前构造函数。我怎样才能改变它以区分传入哪个子类?

    class Collision {
  Asteroid destroyedRoid;
  Projectile collisionProjectile;
  //in case of a laser
  Collision(Projectile Laser, Asteroid collisionAsteroid) {
    destroyedRoid = collisionAsteroid;
    collisionProjectile = Laser;
    //remove laser
    Projectiles.remove(collisionProjectile);
    //create 2 new asteroids half the size
    Asteroids.add(new Asteroid(destroyedRoid.posX, destroyedRoid.posY, 0, 0.5, destroyedRoid.size/2));
    Asteroids.add(new Asteroid(destroyedRoid.posX, destroyedRoid.posY, 0, -0.5, destroyedRoid.size/2));
    //remove destroyed asteroid
    Asteroids.remove(destroyedRoid);
  }
}

先谢谢

1 个答案:

答案 0 :(得分:1)

您认为哪个参数可以包含子类型? ProjectileAsteroid?不管怎样,试试这个:

如果您知道可能的子类型集,那么instanceof检查将告诉您给定对象是否是特定类型的实例。

object instanceof Type

这会返回boolean,告诉您object是否是Type的实例。

但是为了可扩展性,你不应该进行这样的instanceof检查来实现你想要的 - 你应该让所有的子类型实现一个方法来做你想做的事情并多态调用方法运行时将调用正确类型的方法。这有助于提高可扩展性并减少返工。

"Open for extension; closed for modification"了解Effective Java 2nd edition原则。