java - 区分构造函数内的子类

标签 java class constructor processing subclass

我正在使用 java 的处理 API 编写一个程序。 我希望能够将对象传递到类构造函数中,并根据对象所属的子类发生不同的事情。我希望通过使用重载的构造函数来做到这一点。

在此代码中,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);
  }
}

提前致谢

最佳答案

您认为哪个参数可以包含子类型? 射弹还是小行星?不管怎样,试试这个:

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

object instanceof Type

这将返回一个 boolean 值,它会告诉您对象是否是类型的实例。

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

阅读Effective Java 第二版中的“开放扩展;封闭修改”原则。

关于java - 区分构造函数内的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26866233/

相关文章:

java - 带有支持 X-FACEBOOK-PLATFORM 的 Java Asmack 库的 XMPP

java - 在 Android 应用程序中显示从 PHP 捕获的 JSON 对象

android - 在模型类中定义构造函数(使用 Cloud Firestore 获取数据)

c++ - C++中构造函数的奇怪使用

C++ 复制构造函数,谁能解释为什么?

java - 即使在 vm args 中使用 XstartOnFirstThread,线程访问也无效

java - 在 Spring MVC 应用程序中使用 favicon 的问题

Javascript:当它包含一个点时获取构造函数名称

c++ - 同时进行优化和可测试性——如何将代码分解成更小的单元

c++ - 如何正确构建相互引用的类? (C++)