它似乎工作,但它是一个'好'的编程?将类型转换为超类并调用override方法可接受? (Java)
下面是一个例子来阐明:
public class foo{
foomethod(){do something};
}
public class foo1 extends foo{
@override foomethod(){do something};
}
public class foo2 extends foo{
@override foomethod(){do something};
}
ArrayList x /*with foo1 and foo2 objects*/
for (Object o : x){((foo)o).foomethod();}
是这个concidered“好”节目,如果没有什么是一个不错的紧凑的替代? (除了开关(o.getClass()),如果可能的话)
编辑,因为我真的很糟糕的澄清似乎:)
我的意思是调用已重写方法,而不是超方法。 什么我想要做的是另一种方法:
ArrayList中的x/*再次foo1和foo2的对象*/
for (Object o : x){
switch(o.getClass()){
case foo1.class:
((foo1)o).foomethod();
break;
case foo2.class:
((foo1)o).foomethod();
break;
}
}
,但我想避免switch语句,因为它使代码更更大更复杂。
好吧,如果你的软件设计的很好,你应该永远不需要那样做。覆盖该方法的重点是因为如果一个对象是超类的子类,它应该具有不同的功能。 – Joel
*“我的意思是调用已被覆盖的方法,而不是超级方法。”* - 这没有意义。超类中的方法是重写的方法! –
我知道,有些事情很难用第一种语言进行沟通,对不起,我的意思是调用重写超级方法的方法,这样做会让人感觉如何? – r0t0r