在不同的类之间访问相同的方法?
Posted
技术标签:
【中文标题】在不同的类之间访问相同的方法?【英文标题】:Access the same method among different classes? 【发布时间】:2016-05-01 06:34:00 【问题描述】:我正在编写一个简单的平台游戏,我有几种类型的平台。我为最简单的类型创建了一个类并创建了其余的子类,每个类之间的唯一区别是它们的变量的值(因此它们都共享相同的变量和方法名称)。
在我的碰撞检测中,我循环通过 HashMap
。其中HashMap
是每个类实例的ArrayLists
。但是当我使用嵌套循环循环尝试隐式调用它们的方法时,我发现如果不明确声明要从哪个类调用方法,我就无法访问这些方法。
我已经进行了研究,尽管我能看到的唯一方法是分别循环遍历每个类的实例,这意味着每个类一个循环;我宁愿不这样做,因为这会比我觉得需要的代码多得多。
【问题讨论】:
使用通用的基类或接口。 【参考方案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();
将输出:“我是橙子”。
【讨论】:
以上是关于在不同的类之间访问相同的方法?的主要内容,如果未能解决你的问题,请参考以下文章