在Java中访问私有字段

Eug*_*ene 2 java

我不明白为什么我可以访问private int i课堂外的私人课程.

public class Fish {

    private int i = 1;

    public static void main(String[] args) {
        Fish k = new Fish();
        k.i = 2; // it IS possible
    }

}
Run Code Online (Sandbox Code Playgroud)

jd.*_*jd. 6

你的主要方法是Fish类的一部分不是吗?

以下不起作用:

public class Fish {

    private int i = 1;

}

class Reptile{
  public static void main(String[] args) {
         Fish k = new Fish();

         k.i = 2; // Compiler error.
     }
}
Run Code Online (Sandbox Code Playgroud)


aio*_*obe 6

访问修饰符在类级别而不是在对象级别上工作.

您可以访问,k.i因为代码与i声明成员的类在同一个类中.

理由是(afaik)以下内容:您(部分)封装数据以便于将来的维护和重构.当您重构代码时,您重构类,而不是对象.