0

我在结构上遇到了一些问题。

我有几个扩展实体类的类对象,其中一些类覆盖了实体类中的函数 A(),需要一定的输入(例如 A(int input))。

有什么方法可以同时调用所有对象的函数 A() (意思是,每个类都没有单独的列表)?

我现在使用 arrayList(entities) 来存储所有对象并将它们类型转换到 for 循环中。这看起来相当混乱,我很确定我误解了 OOP 的一些基本原则。

    for (int i=0;i<entities.size();i++) {           
        Entity entityPre = (Entity) entities.get(i);

        if (entityPre instanceof subClass) { 
            subClass entity= (subClass) entityPre;
            entity.A(int Input);
        }else{
            entityPre.A();
        }
    }

任何帮助将不胜感激。

4

4 回答 4

1

A()当您更改方法参数因此更改方法签名时,您并没有真正覆盖。

因此,您不能使用“常规”覆盖机制,并且您会被当前的实现所困。

如果您将方法参数添加到您的基类(即使它没有使用它),您可以正确地覆盖该方法并简化您的循环内容。但就个人而言,我只会执行此修改,因为附加参数基类有意义!

于 2012-12-24T13:07:22.437 回答
0

我实际上并没有得到你想要的,在上面的描述中什么是“A”它是一个函数或类,如果它是一个函数那么你怎么能这样写'if(entityPre instanceof A){A entity =(A)实体前; entity.doLogic(int Input); }' 首先你必须阅读“instanceOf”方法,JB 的答案会帮助你。

于 2012-12-24T13:19:52.590 回答
0

如果A(int)是基实体类的方法,在子类中被覆盖,那么您不需要任何类型转换。这就是多态性的全部意义:

for (Entity entity : entities) {           
    entity.A(input);
}

旁注:您应该为您的方法和变量选择更好的名称,并尊重 Java 命名约定:方法以小写字母开头,而类以大写字母开头。

于 2012-12-24T13:05:22.370 回答
0

你现在做的是正确的。

有什么办法可以同时调用所有对象的函数 A()

不,一个方法只能使用一个对象来调用,除非它被声明为static.

于 2012-12-24T13:05:40.737 回答