0

我写了一个非常小的类[必须增长!]但我突然看到一些“奇怪”的东西。

这是课程:

class Chara{
  private boolean flag_loaded;
  private boolean flag_rage, flag_shield;
  private int int_rage, int_shield;
  Chara(String fileName){
    flag_loaded = true
    if(flag_loaded){
      flag_rage = false;
      int_rage = 0;
      flag_shield = false;
      int_shield = 0;
    }
  }
  boolean rage(){return flag_rage;}
  boolean shield(){return flag_shield;}
  void add_rage(int toAdd){flag_rage = Bool(int_rage += limitMin(toAdd, 0));}
  void add_shield(int toAdd){flag_shield = Bool(int_shield += limitMin(toAdd, 0));}
  void sub_rage(int toAdd){flag_rage = Bool(int_rage -= limitMin(toAdd, 0));}
  void sub_shield(int toAdd){flag_shield = Bool(int_shield -= limitMin(toAdd, 0));}

如您所见,所有变量都设置为private.

注意:limitMin()返回相同类型的变量,在这种情况下0iftoAdd较低。Bool() 只是一个演员表。

这是一个主要的:

Chara chara = new Chara("lol");
print(chara.int_shield, (chara.shield()) ? COL_GREEN : COL_RED);
print(chara.flag_shield, (chara.shield()) ? COL_GREEN : COL_RED);

在声明、实例和打印之间什么都不做。

这段代码应该以绿色打印盾牌的值以及是否有盾牌,但它不应该打印任何东西,因为int_shield应该flag_shieldprivate

结果是一个很好0false红色......

为什么会这样?我做错了什么?

绝望中,我尝试制作变量protected,但正如我所料,什么也没发生。

编辑:添加了整个 Chara 类。

4

1 回答 1

1

您的main方法必须在您的Chara类中或在该类的某个封闭类中声明Chara。这可以解释为什么它可以直接访问实例的private字段。CharaJava 访问规则将阻止在所有其他情况下访问private变量。

允许内部/嵌套类访问封闭类的私有变量,反之亦然。(至少,从“访问”规则的角度来看是允许的。还有各种其他规则可能会阻止/限制这一点。)

我敢肯定这里没有“未定义的行为”。只是你不理解的行为。


如果这不能解释行为,我不明白你的问题/你的代码到底是什么样子。如果您需要进一步的帮助,请将您问题上的代码片段替换为 SSCCE。

于 2013-10-26T02:52:04.907 回答