Java 多态重载
我正在设计一个物理模拟器,里面有三种可以碰撞的东西 最基本的[抽象]类称为Java 多态重载,java,inheritance,Java,Inheritance,我正在设计一个物理模拟器,里面有三种可以碰撞的东西 最基本的[抽象]类称为Item,它包含质量、位置和速度的信息 还有3种其他类型:Circle、Boundary和Photon,它们扩展了项类并具有自己的属性 我有一个名为system的列表,其中包含各种圆圈,边界等,我通过使用以下方法检查冲突:system.get(I).collide(system.get(j))并编辑速度等 我的问题是,Eclipse希望我在圆圈,边界中的每一个都有一个方法。。。名为collide(Item itemName
Item
,它包含质量、位置和速度的信息
还有3种其他类型:Circle
、Boundary
和Photon
,它们扩展了项
类并具有自己的属性
我有一个名为system
的列表,其中包含各种圆圈
,边界
等,我通过使用以下方法检查冲突:system.get(I).collide(system.get(j))代码>并编辑速度等
我的问题是,Eclipse希望我在圆圈
,边界
中的每一个都有一个方法。。。名为collide(Item itemName)
的类,但通过这样做,编译器将无法对每种类型的项进行不同的处理
我目前在圈
,边界
中有不同的方法。。。课程包括:
collide(Circle c){..}
collide(Boundary b){..}
collide(Photon p){..}
但是编译器需要一个通用的collide(第一项)
方法
如何满足编译器的要求,但仍然像我一样使用继承来不同地处理不同类型的冲突?您可以简单地保持collide(Item b){..}
或类似的collide(您可以简单地保持collide(Item b){..}
或类似的collide(您应该覆盖collide>)(项目i)
用于每个子类。您可以在每个实现中检查项目的类型,例如,在光子
类中:
@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 :)
}
}
这与为新类型重写对象的方法非常相似。您应该为每个子类重写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 :)
}
}
这与为新类型重写对象的方法非常相似。您仍然可以使用collide(Item i)
但是,如果您希望方法对每个超类的行为有所不同,您可以这样做:
public void collide(Item i) {
if(i instanceof Circle) {
//do something for a circle
} else if(i instanceof Photon) {
//do something for a photon
} else if(i instanceof Boundary) {
//do something for a boundary
}
}
您仍然可以使用collide(项目一)
但是,如果您希望方法对每个超类的行为有所不同,您可以这样做:
public void collide(Item i) {
if(i instanceof Circle) {
//do something for a circle
} else if(i instanceof Photon) {
//do something for a photon
} else if(i instanceof Boundary) {
//do something for a boundary
}
}
system.get(一)
返回一个项
,编译器无法知道它是圆、边界还是光子。因此,collide
方法必须使用Item
参数。我建议真正需要回答的问题是,为什么首先需要不同版本的方法?system.get(I)
返回一个项
,编译器无法知道它是圆、边界还是光子。因此,碰撞
方法必须采用项
参数。我建议真正需要回答的问题是,为什么首先需要该方法的不同版本?能否给我一个例子?我从未使用过那种类型的代码before@chairharrison,kiruwka提供了一个更简单的解决方案:)你可以参考它,如果你想学习泛型,那么你可以学习我提供的链接。你能给我一个例子吗?我从来没有使用过那种类型的代码before@chairharrison,kiruwka提供了一个更简单的解决方案:)你们可以参考它,若你们想学习泛型,那个么你们可以学习我提供的链接