如何访问此私有变量?

2022-09-01 00:57:36

当我编写以下代码时,编译器如何不抱怨?

public class MyClass 
{
    private int count;

    public MyClass(int x){
        this.count=x;
    }

    public void testPrivate(MyClass o){
        System.out.println(o.count);
    }   
}

即使它是编写的同一类的实例,它不应该在 ?毕竟,我正在尝试直接访问私有变量。
代码甚至可以正常运行。testPrivateSystem.out.println(o.count)


答案 1

可以从声明私有成员的类中的任何方法访问私有成员,无论该方法是访问其自己的 () 实例的私有成员还是其他实例的私有成员。this

这在 JLS 6.6.1 中有所说明:

...否则,如果成员或构造函数被声明为私有,则当且仅当访问发生在包含成员或构造函数声明的顶级类 (§7.6) 的主体中时,才允许访问。

Java 的此功能允许您编写接受类的实例作为参数的方法(例如 - , ),而不依赖于该类具有所有需要访问的私有属性的非私有 getter。clone(Object other)compareTo(Object other)


答案 2

私有字段是整个类的私有字段,而不仅仅是对象的私有字段。

其他类不知道MyClass有一个名为count的字段;但是,MyClass 对象知道另一个 MyClass 对象具有 count 字段。


推荐