我在结构方面遇到了一些麻烦。
我有几个扩展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();
}
}
任何帮助都会受到很大关注。
答案 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的答案将有助于你。