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();
}
}
任何帮助都是非常感激的
# 1 楼答案
我没有得到你想要的,在上面的描述中,什么是“A”,它是一个函数或类,如果它是一个函数,那么你怎么能这样写呢 A实体=(A)实体类型; 实体doLogic(int输入); }首先,你必须阅读“instanceOf”方法,JB的答案将对你有所帮助
# 2 楼答案
您当前所做的是正确的
否,只能使用对象调用方法,除非将其声明为
static.
# 3 楼答案
当您更改方法参数从而更改方法签名时,您并没有真正重写
A()
因此,您不能使用“常规”覆盖机制,并且只能使用当前的实现
如果将该方法参数添加到基类中(即使基类未使用它),则可以正确重写该方法并简化循环内容。但是就我个人而言,我只会执行这个修改,因为附加的参数对基类有意义
# 4 楼答案
如果
A(int)
是在子类中重写的基本实体类的方法,则不需要任何类型转换。这就是多态性的全部含义:旁注:您应该为方法和变量选择更好的名称,并遵守Java命名约定:方法以小写字母开头,而类以大写字母开头