我正在编写一个简单的平台游戏,我有几种类型的平台。我为最简单的类型创建了一个类,并创建了其余的子类,每个类之间的唯一区别是它们的变量值(因此它们共享相同的变量和方法名称)。
在我的碰撞检测中,我循环了HashMap
。其中HashMap
是每个类的ArrayLists
个实例。但是当我使用嵌套循环来循环尝试隐式调用它们的方法时,我发现如果没有明确地声明我想从哪个类调用该方法,我就无法访问这些方法。
我已经做过研究,虽然我能看到这样做的唯一方法是分别遍历每个类的实例,这意味着每个类一个循环;我宁愿不这样做,因为它会比我认为必要的代码多得多。
答案 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();
将输出:“我是橙色”。