您可以在运行时测试具体类型是什么Karakter
并转换为适当的 SubType。
for(Karakter k : karakters) {
if (k instanceof Orc) {
((Ork)k).getRace();
} else if (k instanceof Human) {
((Human)k).getRace();
}
}
此外,如果 a拥有 a有意义,您似乎可以将方法推getRace()
入.Karakter
Karakter
getRace()
class/interface Karakter {
abstract String getRace();
}
Karakter
如果拥有 a没有意义getRace()
,例如,如果有另一种Alien extends Karakter
没有 a 的类型,getRace()
您可以使用额外的接口进行抽象:
public interface IRacer {
abstract String getRace();
}
public class Human extends Karakter implements IRacer { ... }
public class Orc extends Karakter implements IRacer { ... }
这样你可以这样做:
for(Karakter k : karakters) {
if (k instanceof IRacer) {
((IRacer)k).getRace();
}
}
此外,它看起来像您的class Karakters
extends ArrayList
。不。优先使用组合而不是继承,并且始终使用ArrayList<Karakter>
.