実行時に具体的なタイプをテストしKarakter
、適切なサブタイプにキャストできます。
for(Karakter k : karakters) {
if (k instanceof Orc) {
((Ork)k).getRace();
} else if (k instanceof Human) {
((Human)k).getRace();
}
}
また、がを持っていることが理にかなっている場合は、メソッドをにプッシュできるように見えます。getRace()
Karakter
Karakter
getRace()
class/interface Karakter {
abstract String getRace();
}
たとえば、をKarakter
持たないgetRace()
別のタイプがある場合、追加のインターフェイスを使用して抽象化することができます。Alien extends Karakter
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
また、それはあなたの拡張のように見えますArrayList
。しないでください。継承よりもコンポジションを優先し、常にジェネリックバージョンのを使用しArrayList<Karakter>
ます。