我正在使用 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/