【问题标题】:Access the same method among different classes?在不同的类之间访问相同的方法?
【发布时间】:2016-05-01 06:34:00
【问题描述】:
我正在编写一个简单的平台游戏,我有几种类型的平台。我为最简单的类型创建了一个类并创建了其余的子类,每个类之间的唯一区别是它们的变量的值(因此它们都共享相同的变量和方法名称)。
在我的碰撞检测中,我循环通过 HashMap。其中HashMap 是每个类实例的ArrayLists。但是当我使用嵌套循环循环尝试隐式调用它们的方法时,我发现如果不明确声明要从哪个类调用方法,我就无法访问这些方法。
我已经进行了研究,尽管我能看到的唯一方法是分别循环遍历每个类的实例,这意味着每个类一个循环;我宁愿不这样做,因为这会比我觉得需要的代码多得多。
【问题讨论】:
标签:
java
arraylist
methods
【解决方案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】:
简单,让每个平台类实现一个IPlatform接口或扩展一个基类。查找 java 多态性和接口。
【解决方案3】:
您的子类是否覆盖了超类的常用方法?
换句话说,您的子类的通用方法是否在您的简单类中声明?
如果是这种情况,您可以简单地调用该方法,就像它是一个简单的类一样:
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();
将输出:“我是橙子”。