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

时间:2015-05-15 02:18:16

标签: java private

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

public class MyClass {
    private int thing;

    public MyClass () {}

    public MyClass makeMe () {
        MyClass myClass = new MyClass();
        myClass.thing = 1;
        return myClass;
    } 
}

2 个答案:

答案 0 :(得分:6)

私人字段只能由该类访问。您仍然在MyClass的实例中运行,因此私有字段在您不使用setter的情况下可见且可访问。

要更正式一点...... JLS 6.6.1谈论访问。

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

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

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

答案 1 :(得分:2)

public MyClass makeMe () {
    MyClass myClass = new MyClass();
    myClass.thing = 1;
    return myClass;
} 

是<{1}}类里面的,因此它可以访问私人会员。