如何从扩展同一个类的几个类中调用一个函数

时间:2012-12-24 12:59:24

标签: java oop

我在结构方面遇到了一些麻烦。

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

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

我现在使用arrayList(实体)来存储所有对象并将它们转换为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 个答案:

答案 0 :(得分:1)

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

因此,您无法使用“常规”覆盖机制,而且您仍然无法使用当前的实现。

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

您目前正在做的是正确的。

  

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

不可以,只能使用 a 对象调用方法,除非它被声明为static.

答案 3 :(得分:0)

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