如何在Java中跨类访问并更新变量?——Monster类hp变量访问与修改问题求助
问题分析与解决方案
看起来你遇到的问题根源有两个,咱们一步步拆解解决:
1. 核心问题:Monster类缺少访问hp的公共方法
你的Monster类里的hp是private修饰的私有变量,按照Java的封装规则,外部类根本无法直接读写它,必须通过类提供的getter(获取值)和setter(修改值)方法才能操作。
先给你的Monster类补充这两个关键方法:
public class Monster{ private String name, type; private int hp, speed, attack, defense; private Move move1, move2, move3, move4; public Monster(String name, String type, int hp, int speed, int attack, int defense, Move move1, Move move2, Move move3, Move move4) { this.name = name; this.type = type; this.hp = hp; this.speed = speed; this.attack = attack; this.defense = defense; this.move1 = move1; this.move2 = move2; this.move3 = move3; this.move4 = move4; } // 新增:获取当前HP的getter方法 public int getHP() { return this.hp; } // 新增:修改HP的setter方法(可以额外加个逻辑防止HP变成负数) public void setHP(int newHP) { this.hp = Math.max(newHP, 0); // 确保HP不会低于0,符合游戏逻辑 } }
2. 修正调用代码的对象引用错误
你最后一行的hp.setHP(updatedHP);是完全错误的——这里的hp变量根本没有定义,你要修改的是pl.getMonster()返回的那个被攻击的怪物实例,所以要调整调用逻辑:
damage = getMonster().getAttack() + movePower - pl.getMonster().getDefense(); int currentHP = pl.getMonster().getHP(); // 注意:要获取被攻击方的当前HP int updatedHP = currentHP - damage; pl.getMonster().setHP(updatedHP); // 对被攻击的怪物实例调用setHP方法
补充提醒:如果你的getMonster()是获取攻击方的怪物对象,那获取HP的时候一定要用pl.getMonster()(被攻击方),不然会错误地修改攻击方自己的HP,这点要对应你的游戏逻辑确认。
为什么之前的操作全无效?
private私有变量的封装规则限制了外部直接访问,必须通过类提供的公共方法操作;- 最后一行代码没有正确引用要修改的Monster实例,用了一个未定义的
hp变量,自然无法生效。
内容的提问来源于stack exchange,提问作者ayy
相关产品推荐
相关产品推荐

