最近,我观察到在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实现.在它们之间隔离实例,或者保护实例的代码不受同一类的静态代码的影响,什么都不带来.