我想创建具有包含各种对象的Object数组的类World。
public class World {
Object obj[] = new Object[10];
public void World() {
this.obj[0] = new Sphere();
this.obj[1] = new Triangle();
... and so on
}
}
然后在主要:
World world = new World();
我想使用属于特定物体的methot。
e.g。
world.obj[i].methodOfSphere();
我怎样才能做到这一点?
答案 0 :(得分:2)
正如Makoto已经评论过,您可以使用instanceof
验证,然后执行cast
...
if(world.obj[i] instanceof Sphere)
((Sphere)world.obj[i]).methodOfSphere();
然而,这并不酷。
您应该考虑阅读interface
为您的形状创建behaviour
,并覆盖实施中的方法......
public interface Shape
{
methodSpecificToAllShape();
method2SpecificToAllShape();
}
public class Sphere implements Shape
{
@Override
methodSpecificToAllShape()
{
//...
}
@Override
method2SpecificToAllShape()
{
//...
}
/*
* It does not stop you from adding method for a specific shape
*/
public void method3SpecificToSphere()
{
//...
}
}
执行此操作,您将对象声明为Shape
,然后将调用不同的方法以实现正确的实现,而无需进行强制转换。
Shape triangle = new Triangle();
Shape sphere = new Sphere();
triangle.methodSpecifictoAllShape();
sphere.methodSpecificToAllShape();
根据实例,将执行特定于每个形状的方法。