gpt4 book ai didi

Java 继承/OOP - 仅使用父级句柄调用子类型特定方法

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

我正在用 Java 为 Android 游戏编写一个游戏引擎,我的引擎可以处理不同形状的碰撞检测。每个形状都是它自己的类(方形、圆形等),并且派生自公共(public)抽象父类 Collidable。我有一个物理管理器类,它基本上检查游戏中的任何现有对象是否与另一个对象发生碰撞,然后在检测到碰撞时执行适当的操作。碰撞检查是在每个物理形状子类内部实现的,如下面的代码所示。

public abstract class Collidable
{
}

public class Square extends Collidable
{
public boolean Collides(Square) {...}
public boolean Collides(Circle) {...}
public boolean Collides(Triangle) {...}
}

public class Circle extends Collidable
{
public boolean Collides(Square) {...}
public boolean Collides(Circle) {...}
public boolean Collides(Triangle) {...}
}

public class Triangle extends Collidable
{
public boolean Collides(Square) {...}
public boolean Collides(Circle) {...}
public boolean Collides(Triangle) {...}
}

public class PhysicsMgr
{
public boolean Collides(Collidable p1, Collidable p2)
{
return p1.Collides(p2);
// This obviously won't work because there is no Collides
// method in Collidable. I want it to somehow call the child's
// method and pass in p2 as its child type rather than as
// a parent. Or somehow do this:
return (p1.child()).Collides(p2.child());
// I know that obviously nothing like this exists.
}
}

我知道“instanceof”,并且真的不想检查 p1 和 p2 的子类型与我拥有的每个碰撞形状。一定会有更好的办法。我正在寻找解决当前问题的方法,或者最好重新设计当前的碰撞检测系统以完全避免此问题。

谢谢!

最佳答案

您应该阅读有关 visitor pattern 的内容

关于Java 继承/OOP - 仅使用父级句柄调用子类型特定方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8200075/

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