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

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();

将输出:“我是橙子”。

【讨论】:

以上是关于在不同的类之间访问相同的方法?的主要内容,如果未能解决你的问题,请参考以下文章

面向对象之继承

从其他类Objective-C访问方法

Java---继承

Java 包(package)

Java 包(package)

Java 包(package)