gpt4 book ai didi

java - 多态性重载

转载 作者:行者123 更新时间:2023-12-01 08:04:06 24 4
gpt4 key购买 nike

我正在设计一个物理模拟器,其中包含 3 种可以碰撞的物体。

最基本的[抽象]类称为Item其中包含有关质量、位置和速度的信息。

还有其他 3 种类型:Circle , Boundary & Photon其扩展了 Item类并拥有自己的属性。

我有一个List<Item>system其中包含各种Circles , Boundaries等等,我使用以下方法浏览此列表以检查冲突:system.get(i).collide(system.get(j));这会编辑速度等。

我的问题是, Eclipse 希望我在每个 Circle 中都有一个方法。 , Boundary ...名为 collide(Item itemName) 的类但通过这样做,编译器将无法以不同的方式处理每种类型的项目。

我目前在Circle中有不同的方法, Boundary ...类如:

collide(Circle c){..}
collide(Boundary b){..}
collide(Photon p){..}

但是编译器想要一个通用的 collide(Item i)方法。

如何才能满足编译器的要求,同时仍然使用继承方式以不同的方式处理不同类型的冲突?

最佳答案

您应该为每个子类重写collide(Item i)。您可以检查每个实现中的 item 类型,例如,在您的 Photon 类中:

@Override
public void collide(Item item) {
if (item instanceof Photon) {
// implement collision of this with (Photon) item
} else if ... {
// I wonder how collision of Photon with Circle would look like :)
}
}

这与覆盖对象的 equals 非常相似。新类型的方法。

关于java - 多态性重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22939803/

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