gpt4 book ai didi

java - 可用的私有(private)变量

转载 作者:行者123 更新时间:2023-12-01 13:56:25 27 4
gpt4 key购买 nike

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

这是类(class):

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()返回相同类型的变量,在本例中 0如果toAdd较低。 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_shieldflag_shield应该是private .

结果很好 0和一个不错的false红色...

为什么会发生这种情况?我做错了什么吗?

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

编辑:添加了整个 Chara 类。

最佳答案

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

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

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

<小时/>

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

关于java - 可用的私有(private)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19600859/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com