4

我有一个类,它有一个名为的字段orbits(它与我的类具有相同的类型Body并具有private修饰符):

public class Body {

     // I defined it as private field
     private Body orbits = null;

     public Body getOrbits(){
         return orbits;
     }

     public void setOrbits(Body orbits){
    this.orbits = orbits;
     }

     public void capture(Body victim){
        //Why 'victim' can access 'orbits' ?
        victim.orbits = this;
     }
}

在类中,我定义了一个名为 的方法capture(Body victim),它有一个类型为 的参数Body。我想知道为什么我可以直接访问实例private字段?我的意思是该字段是,它不是无法通过实例受害者访问吗?orbitsvictimprivate

4

5 回答 5

6

隐私不是每个实例 - 它是每个类。

该类可以访问所有实例的私有字段。

例如,该方法equals( Object o )可以将 o(如果合适)转换为相同的类型,并将其私有成员与调用 equals() 的对象进行比较。

于 2013-05-12T19:05:31.153 回答
1

因为victim是 的实例Body,所以它可以访问实例的任何字段Body

于 2013-05-12T19:05:33.463 回答
1

根据Java 语言规范的第 6.6.1 节

否则,如果成员或构造函数被声明为私有,则当且仅当它出现在包含成员或构造函数声明的顶级类(第 7.6 节)的主体内时,才允许访问。

于 2013-05-12T19:06:44.457 回答
0

由于victim也是 type Body,任何实例都Body可以访问该实例的私有成员victim

于 2013-05-12T19:06:27.050 回答
0

受害者是类 Body 的一个实例,并具有该类的所有属性。每个实例都有一个私有属性轨道。

如果您需要类属性,请使用“私有静态”

于 2013-05-12T19:11:42.557 回答