我有一个类,其中有一个名为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
,是不是通过实例受害者无法访问?
答案 0 :(得分:6)
隐私不是每个实例 - 它是每个类。
该类可以访问所有实例的私有字段。
例如,方法equals( Object o )
可以将o(如果适用)转换为相同的类型,并将其私有成员与调用equals()的对象进行比较。
答案 1 :(得分:1)
由于victim
是Body
的实例,因此它可以访问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”