编写以下代码时,编译器如何不抱怨?
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)吗?毕竟,我试图直接访问一个私有变量。 该代码甚至可以正常运行。
testPrivate
System.out.println(o.count)
私有成员可以从声明它的类中的任何方法访问,无论该方法是访问其自己的(this)实例的私有成员还是访问其他实例的私有成员。
this
JLS 6.6.1中对此进行了说明:
…否则,如果将成员或构造函数声明为私有,则仅当访问发生在封装成员或构造函数的声明的顶级类(第7.6节)的主体内时,才允许访问。
爪哇此功能允许您编写接受类的实例作为参数(例如-方法clone(Object other),compareTo(Object other))而不依赖于具有非私人的getter所有私人性质需要访问的类。
clone(Object other)
compareTo(Object other)