我遇到了一个相当奇怪的行为,并且不确定这是Java问题还是Eclipse问题。
请使用以下代码:
class Foo {
private String text;
public void doStuff(Foo f) {
System.out.println(f.text);
}
}
这里的问题是,为什么f.text可以访问?这是一个私有领域,所以根据我的逻辑,它不应该,但IDE似乎认为它。
答案 0 :(得分:13)
这是设计的。私有字段可以在同一个类中访问,即使是不同的实例也是如此。有关详细信息,请参阅here以及Oracle就此发表的官方声明。由于doStuff
是Foo
的成员,因此可以访问Foo
的所有私有字段。
私有修饰符指定只能在其自己的类 [甚至来自不同的实例]中访问该成员。 [强调我的]
现在,由于text
的可见性修饰符,以下代码示例不工作:
class Bar{
public int baz;
public void doMoreStuff(Foo f){
System.out.println(f.text);
}
}
因为doMoreStuff是在Bar
中定义的,而不是Foo
。