Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Как передать поле класса в метод реализующий интерфейс  [new]
x17.mstu
Member

Откуда:
Сообщений: 312
Подскажите что делаю не так , есть абстрактный класс герой , от него наследуются Воин и Паладин , у Война тип атаки Ф-величина physAtt 30, при этом защита у Паладина physDef 50%, начальное состояние здоровья у паладина 100. Воин атакует Паладина , его Здоровье уменьшается на величину 15, так 30*0.5=15, конечное Здоровье 100-15=85, физическая атака реализуется через интерфейс interface PhysAttack (Hero hero) . Не понимаю как передать значение PhysDef от Паладина , при переопределении метода physicalAttack у Война ( warrior )

public abstract class Hero {
    double health; //здоровье
    double PhysDef; //Защита Ф
    double MagicDef; //Защита М
    int physAtt; //Атака Ф - велечина
    int magicAtt;// Атака М - велечина

}

public interface PhysAttack {
   public void  physicalAttack(Hero hero);
}

public class Warrior extends Hero implements PhysAttack{

    double health=100;
    double physDef=0.8;
    int magicDef=0;
    int physAtt=30;
    int magicAtt=0;
    Hero hero;

    public Warrior(Hero hero) {
        this.hero = hero;
    }

    public Warrior() {
        this.health = health;
        this.physDef = physDef;
        this.magicDef = magicDef;
        this.physAtt = physAtt;
        this.magicAtt = magicAtt;
    }

    @Override
    public void physicalAttack(Hero hero) {
        hero.health= hero.health-(physAtt-(physAtt*hero.PhysDef));
    }

    @Override
    public String toString() {
        return "Warrior{" +
                "health=" + health +
                '}';
    }
}

public class Task2 {
    public static void main(String[] args) {
        Warrior wr1 = new Warrior();
        wr1.physicalAttack(new Paladin());
        wr1.toString();

        //Hero hr1 = new Warrior();


    }
}
9 ноя 20, 11:17    [22228608]     Ответить | Цитировать Сообщить модератору
 Re: Как передать поле класса в метод реализующий интерфейс  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
x17.mstu,

Если власс наслебник, то нет необходимости передаватьв интерфейсе методе параметром базовый класс
9 ноя 20, 11:29    [22228616]     Ответить | Цитировать Сообщить модератору
 Re: Как передать поле класса в метод реализующий интерфейс  [new]
maxkar
Member

Откуда:
Сообщений: 166
x17.mstu,

А что не компилируется? Поле можно сделать публичным. Или сделать публичный метод getPhysDef в вашем Hero.

Но вообще этот путь с наследованиями ведет к куче проблем. Есть прекрасная серия блогпостов у Эрика Липперта (именно на примере игр!):

часть 1, часть 2, часть 3, часть 4, часть 5 (там между частями лирическое отступление есть, поэтому дал ссылки на все).
9 ноя 20, 20:36    [22229090]     Ответить | Цитировать Сообщить модератору
 Re: Как передать поле класса в метод реализующий интерфейс  [new]
x17.mstu
Member

Откуда:
Сообщений: 312
maxkar,

решил задачу через родительский класс - все поля передал через super
10 ноя 20, 12:49    [22229467]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить