我怎么能在类中引用实例的私有字段?

boz*_*zle 1 java private

我找了一个解释,但一直找不到.为什么这段代码有效?具体来说 - 为什么可以访问实例的私有成员?据我所知,只有在原始类中的方法中创建实例时,它才有效.

public class MyClass {
    private int thing;

    public MyClass () {}

    public MyClass makeMe () {
        MyClass myClass = new MyClass();
        myClass.thing = 1;
        return myClass;
    } 
}
Run Code Online (Sandbox Code Playgroud)

Mak*_*oto 6

私有字段只能由该类访问.您仍然在一个实例中运行MyClass,因此私有字段是可见的,您可以在不使用setter的情况下访问它.

更正式一点...... JLS 6.6.1谈到了访问.

这是删节片段,强调我的:

  • 只有在类型可访问且声明成员或构造函数允许访问时,才能访问引用(类,接口或数组)类型的成员(类,接口,字段或方法)或类类型的构造函数:

    • ...否则,如果成员或构造函数被声明为private,则当且仅当它发生在包含成员或构造函数声明的顶级类(第7.6节)的主体内时才允许访问.