Java如何使用来自另一个类的实例访问方法

时间:2017-01-16 03:51:02

标签: java methods access instances

我正在尝试编写一款小游戏来帮助我掌握Java技能。我有一个名为" Zombie"和"播放器"我创建了这些类的实例:

Zombie zombie = new Zombie(50, "Infected Zombie", "Slash");
Player defaultPlayer = new Player(100, "Default Player");

接下来,我请求用户输入播放器的攻击风格:

System.out.println("Which attack style would you like to use?");
        defaultPlayer.printAttackStyles();
        int option = scanner.nextInt();
        scanner.nextLine();
        switch(option) {
            case 0:
                System.out.println("You backed out of the fight.");
                break;
            case 1:
                System.out.println("Punching...");
                defaultPlayer.attack(1);
                break;
            case 2:
                System.out.println("Kicking...");
                defaultPlayer.attack(2);
                break;
            case 3:
                System.out.println("Headbutting...");
                defaultPlayer.attack(3);
                break;
            case 4:
                System.out.println("Tackling...");
                defaultPlayer.attack(4);
                break;
            default:
                System.out.println("Not a valid attack style");
        }

在我的"播放器"我有一种叫做攻击的方法,根据攻击方式造成一定程度的伤害:

public int attack(int attackStyle) {
        int damage = 0;

        switch(attackStyle) {
            case 0:
                damage = 0;
                break;
            case 1:
                damage = random.nextInt(20) + 1;
                zombie.removeHealth(damage);
                break;
            case 2:
                damage = random.nextInt(25) + 1;
                zombie.removeHealth(damage);
                break;
            case 3:
                damage = random.nextInt(30) + 1;
                zombie.removeHealth(damage);
                this.health -= random.nextInt(5) + 1;
                break;
            case 4:
                damage = random.nextInt(45) + 1;
                zombie.removeHealth(damage);
                this.health -= random.nextInt(10) + 1;
                break;
        }

        return damage;
    }

在每种攻击方法的情况下,我都有一行代码

zombie.removeHealth(damage);

由于实例仅在Main类中声明,我如何访问该实例以访问zombie类中的方法removeHealth()?对不起,如果这个问题很简单,但我无法解决这个问题。

2 个答案:

答案 0 :(得分:3)

在你的方法攻击中你需要再添加一个参数,可以用来将你的Zombie类实例传递给攻击方法。 将您的方法签名设为  public int attack(int attackStyle,Zombie zombie)

现在在switch块中,当你调用defaultPlayer.attack传递int值,就像你之前传递的那样和你的Zombie类的实例一样

defaultPlayer.attack(你的int值,zombie)

这会将zombie实例传递给攻击方法,然后你可以在那里调用你的removeHealth(damage)方法。

希望这可以解决您的问题。

答案 1 :(得分:2)

在攻击方法中传递Zombie的引用?像这样:defaultPlayer.attack(3, zombie );现在在内部攻击方法中,你可以使用zombie的引用并在其上调用方法。