Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Как передать поле класса в метод реализующий интерфейс / 4 сообщений из 4, страница 1 из 1
09.11.2020, 11:17
    #40016446
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать поле класса в метод реализующий интерфейс
Подскажите что делаю не так , есть абстрактный класс герой , от него наследуются Воин и Паладин , у Война тип атаки Ф-величина physAtt 30, при этом защита у Паладина physDef 50%, начальное состояние здоровья у паладина 100. Воин атакует Паладина , его Здоровье уменьшается на величину 15, так 30*0.5=15, конечное Здоровье 100-15=85, физическая атака реализуется через интерфейс interface PhysAttack (Hero hero) . Не понимаю как передать значение PhysDef от Паладина , при переопределении метода physicalAttack у Война ( warrior )

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
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();


    }
}
...
Рейтинг: 0 / 0
09.11.2020, 11:29
    #40016449
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать поле класса в метод реализующий интерфейс
x17.mstu,

Если власс наслебник, то нет необходимости передаватьв интерфейсе методе параметром базовый класс
...
Рейтинг: 0 / 0
09.11.2020, 20:36
    #40016635
maxkar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать поле класса в метод реализующий интерфейс
x17.mstu,

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

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

часть 1 , часть 2 , часть 3 , часть 4 , часть 5 (там между частями лирическое отступление есть, поэтому дал ссылки на все).
...
Рейтинг: 0 / 0
10.11.2020, 12:49
    #40016779
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать поле класса в метод реализующий интерфейс
maxkar,

решил задачу через родительский класс - все поля передал через super
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как передать поле класса в метод реализующий интерфейс / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]