Как вызвать метод класса из ArrayList

359
05 июня 2017, 22:29

Есть следующий код

public interface Archer {
    public double shoot();
    public void damage(int damage);
    public void health();
}
public interface Warrior {
    public double attack();
    public void damage(int damage);
    public void health();
}
public class ElfArcher implements Archer  {
    public int heals = 100;
    public boolean ellitGroup = false;
    public double shoot() {
        if(ellitGroup == true)
            return 5*1.5;
        else return 5;
    }
    public void damage(int damage) {
        this.heals -= damage;
    }
    public void health() {
        System.out.println("остаток здоровья" + this.heals);
    }
}
public class ElfWarrior implements Warrior {
    public int heals = 100;
    public boolean ellitGroup = false;
    public double attack() {
        if(ellitGroup == true)
            return 15*1.5;
        else return 15;
    }
    public void damage(int damage) {
        this.heals -= damage;
    }
    public void health() {
        System.out.println("остаток здоровья" + this.heals);
    }
}
public class ElfSquad {
    ArrayList squad = new ArrayList();
    Archer arc1,arc2,arc3;
    Warrior war4,war5,war6,war7;
    public ElfSquad() {
    }

    public Archer createArcher() {
        return new ElfArcher();
    }
    public Warrior createWarrior() {
        return new ElfWarrior();
    }
    public ArrayList createSquad() {
        squad.add(createArcher());
        squad.add(createArcher());
        squad.add(createArcher());
        squad.add(createWarrior());
        squad.add(createWarrior());
        squad.add(createWarrior());
        squad.add(createWarrior());
        return squad;
    }
    public void atackedEnemySquad(int who, int damage) {
    }
}
public class Main {
    public static void main(String[] args) {
        ElfSquad squadAliance = new ElfSquad();
        ArrayList test = squadAliance.createSquad();
        test.get(0).shoot();
        test.get(1).damage(15);
        test.get(2).damage(24);
        test.get(3).health();
        test.get(3).attack();
    }
}

Как вызвать методы из интерфейсов shoot(), attack(),damage(),health() следующим образом

test.get(0).shoot();
test.get(4).attack();
test.get(4).health();

Или предложите другой способ его вызвать.

Answer 1

Вам необходим общий интерфейс с необходимыми вам методами от которог унаследованы другие интерфейсы, после этого вы можете писать классы реализовывая эти интерфейсы и тогда можно будет при проходе в цикле или еще где либо вызывать этот метод. Может я не очень понятно объясняю, тогда вам лучше почитать про полиморфизм и наследование.

interface IBase{
   void common();
}

interface IA extends IBase{
    void sayA();
}

interface IB extends IBase{
    void sayB();
}
class A implements IA{
    public void common() {
        System.out.println("Common A");
    }
    public void sayA() {
        System.out.println("Say A");
    }
}

class B implements IB{
    public void common() {
        System.out.println("Common B");
    }
    public void sayB() {
        System.out.println("Say B");
    }
}
public class Launch {
    public static void main(String[] args) {
        List<IBase> list = new ArrayList<IBase>();
        list.add(new A());
        list.add(new A());
        list.add(new A());
        list.add(new A());
        list.add(new A());
        list.add(new B());
        list.add(new B());
        list.add(new B());
        list.add(new B());
        list.add(new B());
        for (IBase base : list) {
            base.common();
        }
        list.get(0).common();
        list.get(7).common();
    }
}
READ ALSO
Парсинг Json, почему не работает?

Парсинг Json, почему не работает?

Что я сделал не так?

349
Защита apk от декомпиляции

Защита apk от декомпиляции

Подскажите самые простые из существующих методов защиты для скрытия (шифровки, нечитаемости и пр) хотябы одного файла strings

327
Увеличивается память базы Realm

Увеличивается память базы Realm

В приложении при каждом запуске я гружу расписание занятий сервера и кладу его в бд RealmНо при каждом перезапуске приложения память увеличивается...

260