Java静态方法访问私有变量

TK:

我给人的印象是,私有非静态变量只能通过在变量所驻留的对象上调用的方法来访问,但事实并非如此。有人可以解释为什么以下代码会编译并运行吗?

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章