我正在将游戏编程为Java applet,并且有两个具有相似变量的不同类-PavementWay

我想创建一个包含两个类的对象的数组。我必须更改所有这些对象的xy,以便创建一个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());

}

09-25 20:43