-2
class TestPrivate2 {
private int n;
}

public class TestPrivate {

private int n;

public void accessOtherPrivate(TestPrivate other) {
    other.n = 10;// can use other class's private field,why??????????
    System.out.println(other.n);
}

public void accessOtherPrivate(TestPrivate2 other) {
//      other.n = 10;//can not access,i konw
//      System.out.println(other.n);//
}
public static void main(String[] args) {
    new TestPrivate().accessOtherPrivate(new TestPrivate());
}

}

看看TestPrivate的方法:accessOtherPrivate。为什么可以使用其他类的私有字段,为什么?

4

4 回答 4

3

它不访问另一个的字段。它访问同一的另一个对象的私有字段。

在 Java 中,您不能访问其他类的私有字段,因为您不应该知道它们在内部是如何工作的。但是您仍然可以访问同一类中其他对象的私有字段。

于 2013-10-10T17:54:45.697 回答
2

private字段是特定实例私有的,这是一种常见的误解。不,它是那个特定的私有的class

来自Oracle 访问控制教程

在成员级别,您也可以像顶级类一样使用公共修饰符或无修饰符(包私有),并且具有相同的含义。对于成员,还有两个额外的访问修饰符:private 和 protected。private 修饰符指定该成员只能在其自己的类中访问。

于 2013-10-10T17:55:38.443 回答
0
public void accessOtherPrivate(TestPrivate other)

您正在同一类中访问 TestPrivate 的私有字段,它不是另一个类,这就是它能够访问 n 的原因。

于 2013-10-10T17:57:55.123 回答
0

因为他们是同一个班级。一个对象可以引用它自己的类的私有字段。

顺便说一句,您的TestPrivate2课程只是混淆了这个问题并且不相关。

于 2013-10-10T17:54:56.923 回答