有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从扩展同一类的多个类调用函数

我在结构上有点问题

我有几个扩展实体类的类对象,其中一些类覆盖实体类中的函数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) 个答案

  1. # 1 楼答案

    我没有得到你想要的,在上面的描述中,什么是“A”,它是一个函数或类,如果它是一个函数,那么你怎么能这样写呢 A实体=(A)实体类型; 实体doLogic(int输入); }首先,你必须阅读“instanceOf”方法,JB的答案将对你有所帮助

  2. # 2 楼答案

    您当前所做的是正确的

    Is there any way i can call the function A() of all the objects at the same time

    否,只能使用对象调用方法,除非将其声明为static.

  3. # 3 楼答案

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

    因此,您不能使用“常规”覆盖机制,并且只能使用当前的实现

    如果将该方法参数添加到基类中(即使基类未使用它),则可以正确重写该方法并简化循环内容。但是就我个人而言,我只会执行这个修改,因为附加的参数对基类有意义

  4. # 4 楼答案

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

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

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