Проблема с методом субкласса

Есть Класс Game с Arraylist-ом,в котором номинально содержатся объекты player
Класс Wolf унаследован от player, и имеет метод kill()

public class Game {
    static ArrayList<player> players = new ArrayList<player>(); 

Arraylist содержит объекты как player,так и Wolf
Так вот при переборе этого ArrayList-а надо сделать так,чтобы метод субкласса использовался как в коде показанном ниже,для объектов Wolf разумеется

for(player ppl : players) {
            if(ppl.Role == "Wolf") {
                ppl.kill();

Если это сделать нельзя,то буду благодарен за альтернативное решение проблемы


Ответы (1 шт):

Автор решения: Alexander Chernin
// Базовый игровой персонаж, с характерными признаками и действиями любого персонажа игры
class Character {
}

// Игрок тоже игровой персонаж
class Player extends Character {
}

// Киллером могут быть и не только волки
interface Killer {
    void kill();
}

// Волк это не только игровой персонаж, но и киллер
class Wolf extends Character implements Killer {
    void kill() {
        // Характерный для волка почерк в убийстве
    }
}

class Game {
    static ArrayList<Character> characters = new ArrayList<Character>(); // Почему static?
    ...
}

for(Character ch : Game.characters) {
    if(ch instanceof Killer) { // Любой киллер, а не только волки
        // если нужны именно волки, то if (ch instanceof Wolf)
        ((Killer)ch).kill();
    }
}
→ Ссылка