第一个Java文件:
public class Swordsman extends Beginner {
public String attFunc;
public String attSkill;
private String nickname;
private int power;
private int result;
public void setnickname(String nickname) {
this.nickname = nickname;
}
public void setpower(int power) {
this.power = power;
}
public Swordsman(int p, String nm) {
setnickname(nm);
setpower(p);
/*nickname=nm;
*power=p;
*/
}
public String nickname() {
return nickname;
}
public int power() {
return power;
}
public int result() {
if (power >= bpower) {
result = 1;
} else if (power < bpower) {
result = 0;
}
}
}
第二个Java文件:
public class Boss {
public int bpower(){
return bpower;
}
}
编译错误:
.\Swordsman.java:32: error: cannot find symbol
}else if(power<bpower){
如您所见,我喜欢从第一个Java文件中的第二个Java文件访问bpower
。我怎么能这样做?
答案 0 :(得分:7)
我在理解这个问题时遇到了很多麻烦。看来你缺乏java的基本概念以及面向对象的编程。
我会尝试解释:
您有一个类Swordsman
,可以将其实例化以创建剑客对象。这些对象只能看到自己的内容。
你有一个完全独立的班级Boss
。并且可以实例化以创建Boss对象。
如果要访问存储在Boss对象中的任何值,通常使用getter和setter方法。你已经拥有的(吸气剂)。请注意,您通常希望按照约定将这些方法命名为getBpower()
。你在某些方法上做到了这一点,但忘记了其他方法。
要实际能够使用该方法,您需要将类导入目标类,如import Boss;
然后您需要从某个地方获取该对象的实例(通过获取它作为参数或重新创建Boss currentBoss = new Boss();
,然后您可以像currentBoss.getBpower();
但是Boss类没有bpower的setter,也没有构造函数,你可以在其中设置一些默认值为bpower。所以当前的Boss类完全没用,因为bpower不能有一个有效的int值。
架构方面还有很大的改进空间。您正准备开始god class
。你的剑士课开始做你可能没想到的东西。就像计算战斗的结果一样。
顺便说一句:一个好习惯是根据他们的行为来命名方法。所以result
听起来像一个属性名称(名词),而它是一个方法(动词)。所以getResult()
会有所帮助,更好的是boolean isFightAgainstEnemySuccessful(Enemy)
。
FightingMachine
等实用方法的单例boolean FightingMachine.isCharacterWinningAgainstEnemy(Character, Enemy)
类来改善自己。 根据经验法则:如果你将一个能力编写成一个似乎令人惊讶的类,那么它可能就错了。对于一个RPG,我希望这个东西的外壳是某种gameState。然后,如果需要,它可以控制和存储环境,角色和敌人并开始战斗。不是相反。
我的实际建议是在尝试编写角色扮演游戏之前实际学习java的概念。那你就会有更多的乐趣。我承诺!