Имеются интерфейсы:
public interface Ancor {
void toShoot();//Дальний бой
void toDamage();//Ближний бой
}
public interface Mag {
void toBless();//Благословить отряд союзника
void magicDamage();//Атака магией
void toCurse();//Снять благословение у противника
}
public interface Warrior {
void toDamage();//Ближний бой
}
их реализуют следующие классы:
public class ElfAncor implements Ancor {
private Integer damage;
private Integer hp = 100;
public ElfAncor() {
System.out.println("Эльф - лучник создан!");
}
public Integer getDamage() {
return damage;
}
public void setDamage(Integer damage) {
this.damage = damage;
}
public Integer getHp() {
return hp;
}
public void setHp(Integer hp) {
this.hp = hp;
}
public void toShoot() {
setDamage(7);
}
public void toDamage() {
setDamage(3);
}
}
public class ElfWarrior implements Warrior {
private Integer damage;
private Integer hp = 100;
public ElfWarrior() {
System.out.println("Эльф - воин создан!");
}
public Integer getDamage() {
return damage;
}
public void setDamage(Integer damage) {
this.damage = damage;
}
public Integer getHp() {
return hp;
}
public void setHp(Integer hp) {
this.hp = hp;
}
public void toDamage() {
setDamage(15);
}
}
public class ElfMag implements Mag {
private Integer damage;
private Integer hp = 100;
public ElfMag() {
System.out.println("Эльф - маг создан!");
}
public Integer getDamage() {
return damage;
}
public void setDamage(Integer damage) {
this.damage = damage;
}
public Integer getHp() {
return hp;
}
public void setHp(Integer hp) {
this.hp = hp;
}
public void toBless() {
}
public void magicDamage() {
setDamage(10);
}
public void toCurse() {
}
}
Мне нужно из коллекции, содержащей данные объекты, получить доступ к методам объекта
public static List firstTeam = new LinkedList();
public ElfAncor elfAncor1, elfAncor2, elfAncor3;
public ElfMag elfMag1;
public ElfWarrior elfWarrior1, elfWarrior2, elfWarrior3, elfWarrior4;
firstTeam.add(elfAncor1 = new ElfAncor());
firstTeam.add(elfAncor2 = new ElfAncor());
firstTeam.add(elfAncor3 = new ElfAncor());
firstTeam.add(elfMag1 = new ElfMag());
firstTeam.add(elfWarrior1 = new ElfWarrior());
firstTeam.add(elfWarrior2 = new ElfWarrior());
firstTeam.add(elfWarrior3 = new ElfWarrior());
firstTeam.add(elfWarrior4 = new ElfWarrior());
Как получить доступ к методам объекта?
Во-первых, не
public static List firstTeam = new LinkedList();
а
public static List<ElfAncor> firstTeam = new LinkedList<>();
возможно даже
public static List<Ancor> firstTeam = new LinkedList<>();
Иначе в коллекцию можно совать любые объекты, а не только с нужным типом.
Во-вторых, совершенно не ясна надпись
firstTeam.add(elfAncor1 = new ElfAncor());
firstTeam.add(elfAncor2 = new ElfAncor());
firstTeam.add(elfAncor3 = new ElfAncor());
Каким образом ты пытаешься одновременно создать объект, воткнуть в список и еще присвоить неизведанной переменной. Если ты записываешь в коллекцию, то и работай с ней.
firstTeam.add(new ElfAncor());
firstTeam.add(new ElfAncor());
firstTeam.add(new ElfAncor());
Например вот вывод hp
всех эльфов:
for (ElfAncor elfAncor : firstTeam) {
System.out.println(elfAncor.getHp());
}
Если так сильно хочется обратиться к конкретному объекту, то обращайся по индексу коллекции к примеру:
System.out.println(firstTeam.get(1).getHp());
Как я понял ты хочешь хранить в одной команде разных типов персонажей и вызывать их методы. Для этого можно наследовать все интерфейсы от одного и создавать лист этого интерфейса, когда необходимо расширять до необходимого наследного класса.
public interface ParentInterface {
void gethp();
}
interface ChaildInterface1 extends ParentInterface {
}
interface ChaildInterface2 extends ParentInterface {
}
interface ChaildInterface3 extends ParentInterface {
}
class Warrior implements ChaildInterface1 {
@Override
public Integer getHP() {
return 1;
}
@Override
public void getDemage() {
}
}
LinkedList<ParentInterface> list = new LinkedList();
list.add(new Warrior());
list.add(new Warrior());
for (ParentInterface anPers : list) {
System.out.println(anPers.getHP());
if (anPers instanceof Warrior){
((Warrior) anPers).getDemage();
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Добрый день, коллегиВопрос следующего характера: имеется многомодульный Java-проект
У меня есть сущности "событие" и "участник"Связь многие-ко-многим
Дана задача - Cоздать двумерный массив из 7 строк по 4 столбца в каждой из случайных целых чисел из отрезка [-5;5]Вывести массив на экран