我给人的印象是,私有非静态变量只能通过在变量所驻留的对象上调用的方法来访问,但事实并非如此。有人可以解释为什么以下代码会编译并运行吗?
public class Sandbox {
private String _privateString = "unmodified";
public static void setPrivateString(String str, Sandbox s) {
s._privateString = str;
}
public String toString()
{
return _privateString;
}
public static void main(String[] args) {
Sandbox s = new Sandbox();
setPrivateString("modified", s);
System.out.println(s);
}
}
输出:
modified
编辑:在C#中也是如此。
可以通过类A的任何方法(静态或非静态)访问(即读取/写入)类A的私有成员变量,因此在您的示例中,因为更改字符串的方法是该成员属于同一类的方法属于,它被授予访问变量的权限。
原因是因为一个类被认为是一个独立的逻辑体(即特定的实现),所以将隐私包含在一个类中是有意义的。没有理由从该访问权限中排除静态方法,因为它们也是该类提供的特定实现的一部分。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句