一尘不染

如何访问此私有变量?

java

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

public class MyClass 
{
    private int count;

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

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

即使它是在其中testPrivate编写的同一类的实例,也不应该在处给出编译错误System.out.println(o.count)吗?毕竟,我试图直接访问一个私有变量。
该代码甚至可以正常运行。


阅读 230

收藏
2020-09-08

共1个答案

一尘不染

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

JLS
6.6.1中
对此进行了说明:

…否则,如果将成员或构造函数声明为私有,则仅当访问发生在封装成员或构造函数的声明的顶级类(第7.6节)的主体内时,才允许访问。

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

2020-09-08