gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:17:58 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com