@turdubekov
Студент

Как получить доступ полям класса?

Все привет!

есть два класса: Hero и Dragon
мне надо получить доступ к полям класса Dracon из класса Hero,
чтобы сделать формулу: Урон = сила_героя + оружие_героя - защита_дракона
как это сделать?

public class Dragon {
    private int hp;        // Жизнь
    private int defence;    // защита
    private int strength;   // Сила
    private int weapon;     // оружие
    private int shield;      // щит

    public Dragon(int hp, int defence, int strength, int weapon) {
        this.hp = hp;
        this.defence = defence;
        this.strength = strength;
        this.weapon = weapon;
        this.shield = shield;
    }
}


import java.util.Scanner;

public class Hero {

    private int hp;        // Жизнь
    private int defence;    // защита
    private int strength;   // Сила
    private int weapon;     // оружие
    private int shield;      // щит



   public Hero(int hp, int defence, int strength, int weapon, int shield){
       this.hp = hp;
       this.defence = defence;
       this.strength = strength;
       this.weapon = weapon;
       this.shield = shield;
   }

    void heroAttack(){
        System.out.println("Нажмите  1 чтобы атаковать дракона!");
        Scanner sc = new Scanner(System.in);
        int user = sc.nextInt();

        if (user == 1){
            int damage = strength + weapon;
        }
    }
  • Вопрос задан
  • 128 просмотров
Решения вопроса 1
Bavashi
@Bavashi
В вашем случае стоит использовать интерфейсные методы, но если хочется порефлексировать, то это будет выглядеть примерно так:
import java.util.*;
import java.util.Scanner;
import java.lang.reflect.*;

public class Main {
    public static void main(String[] args) throws Exception {
        Dragon dragon = new Dragon(10, 20, 30, 40);
        Hero hero = new Hero(50, 60, 70, 80, 90);
        hero.heroAttack(dragon);
    }
}

public class Dragon {
    private int hp;        // Жизнь
    private int defence;    // защита
    private int strength;   // Сила
    private int weapon;     // оружие
    private int shield;      // щит

    public Dragon(int hp, int defence, int strength, int weapon) {
        this.hp = hp;
        this.defence = defence;
        this.strength = strength;
        this.weapon = weapon;
        this.shield = shield;
    }
}

public class Hero {
    private int hp;        // Жизнь
    private int defence;    // защита
    private int strength;   // Сила
    private int weapon;     // оружие
    private int shield;      // щит

   public Hero(int hp, int defence, int strength, int weapon, int shield){
       this.hp = hp;
       this.defence = defence;
       this.strength = strength;
       this.weapon = weapon;
       this.shield = shield;
   }

    void heroAttack(Dragon dragon) throws Exception {
        System.out.println("Нажмите  1 чтобы атаковать дракона!");
        Scanner sc = new Scanner(System.in);
        int user = sc.nextInt();
        
        if (user == 1){
            Field field = Dragon.class.getDeclaredField("defence");
            field.setAccessible(true);
            Object dragonDefence = field.get(dragon);
            int damage = strength + weapon - (int) dragonDefence;
        }
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@Hanneman
Вместо рыбы вот вам удочка: почитайте про getters and setters в Java. Именно через getter вы получите доступ к полям класса. Я уверен, вы разберётесь. Да и на пользу пойдёт.
Ответ написан
Либо сделать переменные public, либо создать геттер
Ответ написан
@azerphoenix
Рекомендую Вам прочитать какую-нибудь книгу по Java, а также изучить принципны ООП, в частности инкапсуляцию. Вам хорошо подсказали, что лучше прочитать про геттеры и сеттеры вместо того, чтобы дать вам ответ
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
XCritical Software Санкт-Петербург
До 370 000 ₽
от 150 000 до 200 000 ₽
MediaSoft Ульяновск
от 80 000 до 150 000 ₽
25 окт. 2020, в 11:50
3000 руб./за проект
25 окт. 2020, в 11:42
3000 руб./за проект
25 окт. 2020, в 10:25
6000 руб./за проект