在不同的类之间访问相同的方法?

时间:2016-01-25 02:43:45

标签: java arraylist methods

我正在编写一个简单的平台游戏,我有几种类型的平台。我为最简单的类型创建了一个类,并创建了其余的子类,每个类之间的唯一区别是它们的变量值(因此它们共享相同的变量和方法名称)。

在我的碰撞检测中,我循环了HashMap。其中HashMap是每个类的ArrayLists个实例。但是当我使用嵌套循环来循环尝试隐式调用它们的方法时,我发现如果没有明确地声明我想从哪个类调用该方法,我就无法访问这些方法。

我已经做过研究,虽然我能看到这样做的唯一方法是分别遍历每个类的实例,这意味着每个类一个循环;我宁愿不这样做,因为它会比我认为必要的代码多得多。

3 个答案:

答案 0 :(得分:1)

简单,使每个平台类实现一个IPlatform接口或扩展一个基类。查找java多态和接口。

答案 1 :(得分:1)

为了能够在不同类型的类上调用公共方法,您需要为对象提供一个公共超类型来声明公共方法 - 即它们应该具有公共超类,或者实现公共接口。

接口提供了一种更简单的方法来声明常用功能,因为一个类可以实现多个接口,但它只能扩展一个类。

提供具有公共方法的接口,然后声明映射以使用该接口的对象,即

interface CommonInterface {
    void commonMethod(int arg);
}

class One implements CommonInterface {
    public void commonMethod(int arg) {
        ...
    }
}

class Two implements CommonInterface {
    public void commonMethod(int arg) {
        ...
    }
}

以下是您现在可以做的事情:

Map<String,CommonInterface> myMap = new HashMap<>();
myMap.put("one", new One());
myMap.put("two", new Two());
for (Map.Entry<String,CommonInterface> e : myMap.entrySet()) {
    System.out.println(e.getKey());
    CommonInterface c = e.getValue();
    c.commonMethod(123);
}

答案 2 :(得分:1)

您的子类是否重写了超类中的常用方法? 换句话说,你的子类是在你的简单类中声明的常用方法吗? 如果是这种情况,您只需将方法称为简单类:

public abstract class Fruit {
    public abstract void method();
}

public class Apple extends Fruit {
    @Override
    public void method() {
        System.out.println("I'm an apple");
    }
}

public class Orange extends Fruit {
    @Override
    public void method()
        System.out.println("I'm an orange");
    }
}

使用此功能,您只需从任何水果中调用您的方法,因为它已声明您的方法。不需要知道它是哪种水果。以下代码:

Fruit fruit = new Orange();
fruit.method();

将输出:“我是橙色”。