我正在将游戏编程为Java applet,并且有两个具有相似变量的不同类-Pavement
和Way
。
我想创建一个包含两个类的对象的数组。我必须更改所有这些对象的x
和y
,以便创建一个Array
。这可能吗?
我已经尝试过ArrayList<Object> obj = new ArrayList<Object>();
,但是如果我obj.add(0, theWay);
,我将找不到一种读取变量的方法。
我还尝试了System.out.print(obj.get(0));
并获得了rpg.way@2c61bbb7
。
最佳答案
简而言之,您想在Way实例或Pavement实例上调用方法(例如setX()
),而无需知道对象是Way还是Pavement。
这正是多态性解决的问题。定义一个接口Locatable
,并使您的两个类实现此接口。然后创建一个List<Locatable>
,您将能够在其中添加Ways and Pavements:
public interface Locatable {
public void setX(int x);
public void setY(int y);
public int getX();
public int getY();
}
public class Way implements Locatable {
...
}
public class Pavement implements Locatable {
...
}
List<Locatable> locatables = new ArrayList<Locatable>();
list.add(new Way());
list.add(new Pavement());
for (Locatable locatable: locatables) {
locatable.setX(22);
locatable.setY(43);
}
for (Locatable locatable: locatables) {
System.out.println("the locatable is an instance of " + locatable.getClass());
System.out.println("its location is " + locatable.getX() + ", " + locatable.getY());
}