Это может показаться громоздким, поскольку механизм разрешения целевых методов в Javas-коде не самый лучший, но вы можете попробовать что-то похожее на
public class Player extends GameObjectImpl {
...
@Override
public void onCollision(GameObject gameObject) {
gameObject.collideWith(this);
}
}
, а затем расширить GameObject
с помощью соответствующего «обратного вызова»:
public interface GameObject {
void onCollision(GameObject gameObject);
void collideWith(Player player);
}
, а затем
public class Player extends GameObjectImpl {
...
@Override
public void onCollision(GameObject gameObject) {
gameObject.collideWith(this);
}
@Override
public void collideWith(Player player) {
// ... do nothing, shouldn't happen
}
}
и
public class Bullet extends GameObjectImpl {
...
@Override
public void onCollision(GameObject gameObject) {
gameObject.collideWith(this);
}
@Override
public void collideWith(Player player) {
player.setHealth(0);
}
}
Для дальнейшего чтения вы можете выполнить поиск шаблона посетителя в Java.