powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Как передать поле класса в метод реализующий интерфейс
4 сообщений из 4, страница 1 из 1
Как передать поле класса в метод реализующий интерфейс
    #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
Как передать поле класса в метод реализующий интерфейс
    #40016449
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x17.mstu,

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

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

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

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

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


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