为什么允许访问另一个对象的私有字段?

Joh*_*ood 7 java private

最近,我观察到在Java中访问priavte字段的意外行为.请考虑以下示例,该示例说明了该行为:

public class A {

    private int i;  <-- private field!

    public A(int i) {
        this.i = i;
    }

    public void foo(A a) {
        System.out.println(this.i);  // 1. Accessing the own private field: good
        System.out.println(a.i);     // 2. Accessing private field of another object!
    }

    public static void main(String[] args) {
        (new A(5)).foo(new A(2));
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么我可以访问类的其他对象的私有字段A的内foo法(第二种情况)?

Den*_*ret 13

私有字段保护类,而不是实例.主要目的是允许类独立于其API实现.在它们之间隔离实例,或者保护实例的代码不受同一类的静态代码的影响,什么都不带来.

  • 社区维基?这是先发制人的downvote盾牌吗?:) (3认同)