访问实例对象的私有字段

时间:2013-05-12 19:04:06

标签: java java-ee

我有一个类,其中有一个名为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的{​​{1}}字段orbits的方法?我的意思是该字段为victim,是不是通过实例受害者无法访问?

5 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:1)

由于victimBody的实例,因此它可以访问Body isntance的任何字段。

答案 2 :(得分:1)

根据section 6.6.1 of the Java Language Specification

  

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

如果你需要一个class-Attribute,请使用“private static”