为什么我可以从其类中更改私人属性?
问题描述:
我现在处理几个月的代码,我试图使用java类。我是一个java类的新手,我相信一个类的私有属性不能在这个类之外被修改。 但是我确实在Processing的setup()
void中更改了一个对象的私有属性。我不明白为什么我能够做到这一点。 任何人都可以帮助我吗?为什么我可以从其类中更改私人属性?
的类代码的一部分:
public class Character {
private String name;
...
public Character(String pName, ...) {
name = pName;
...
public void dname() {
println(this.name);
}
}
的setup()
代码:
void setup() {
player = new Character("John Doe", ...);
player.dname(); //I get "John Doe".
player.name = "tara";
player.dname(); //I get "tara", without any error.
}
非常感谢您!
答
如果这是在Processing编辑器中,那么后台的Java类是inner classes。
这就是为什么你可以从草图访问类中的私有变量。这也是为什么你可以从你的课堂中获得处理功能的原因。
您可以尝试将该类放在其自己的选项卡中。确保选项卡以.java
结尾,因此它被视为“真正的”Java类。
但处理往往会隐藏来自您的访问修饰符之类的东西,所以您最好不要过于担心它。
** **设置代码位于哪里?这是关键。它与Character类是否在同一个文件中? –
@HovercraftFullOfEels不,设置在主文件中,而Character类位于定义了所有类的文件中。这是如何影响公共/私人机制的? – hiberfil
@hiberfil我从来没有使用过处理,但提到[本文档](https://processing.org/reference/private.html):“这个关键字被用来**禁止其他类访问字段和班级内的方法“(强调我的)。这可能措辞松散,但正如所写的,如果你的'setup()'方法不在类中,这意味着'private'被忽略。 –