You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java开发中如何调用其他类中定义的变量?

问题原因

playerHealth是定义在Player类中的成员变量,默认作用域仅在Player类内部生效,BattleSequence类不在其作用域范围内,因此编译器会抛出无法解析符号的报错。

推荐实现方案(符合OOP封装规范)
  • 步骤1:调整Player类定义,封装血量属性并提供对外开放的访问方法
public class Player {
    // 私有属性,禁止外部直接修改,符合封装要求
    private int playerHealth;

    // 构造方法,初始化玩家血量
    public Player(int initHealth) {
        this.playerHealth = initHealth;
    }

    // 对外开放的get方法,用于获取玩家当前血量
    public int getPlayerHealth() {
        return playerHealth;
    }

    // 对外开放的set方法,用于更新玩家血量(战斗扣血、加血时调用)
    public void setPlayerHealth(int newHealth) {
        this.playerHealth = newHealth;
    }
}
  • 步骤2:修改BattleSequence类,先实例化Player对象,再通过get方法获取血量
public class BattleSequence {
    public static void main(String agrs[]) {
        System.out.println("Welcome to the dungeon!");
        // 实例化玩家对象,初始血量设为100
        Player currentPlayer = new Player(100);
   
        while (currentPlayer.getPlayerHealth() > 0) {
            System.out.println("---------------------------");
            // 此处补充战斗逻辑,扣血时调用currentPlayer.setPlayerHealth()更新血量即可
        }
    }
}
可选简化方案(仅适用于全局单玩家场景)

如果你的游戏全局只会存在一个玩家,也可以将playerHealth定义为Player类的静态变量,不需要实例化即可直接调用:

// Player类静态变量定义
public class Player {
    public static int playerHealth = 100;
}

调用时直接使用类名访问即可:

while (Player.playerHealth > 0) {
    // 战斗逻辑
}

注意:该方案弊端是静态变量为类全局共享属性,若创建多个玩家实例,所有实例的血量会同步变化,不支持多玩家场景。

内容的提问来源于stack exchange,提问作者Epicskylegend

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 03:27:05