我遇到了一个相当奇怪的行为,不确定这是 Java 问题还是 Eclipse 的问题。
采取以下代码:
class Foo {
private String text;
public void doStuff(Foo f) {
System.out.println(f.text);
}
}
这里的问题是,为什么 f.text 可以访问?这是一个私有字段,所以按照我的逻辑,它不应该是,但 IDE 似乎认为它是。
我遇到了一个相当奇怪的行为,不确定这是 Java 问题还是 Eclipse 的问题。
采取以下代码:
class Foo {
private String text;
public void doStuff(Foo f) {
System.out.println(f.text);
}
}
这里的问题是,为什么 f.text 可以访问?这是一个私有字段,所以按照我的逻辑,它不应该是,但 IDE 似乎认为它是。
这是设计使然。私有字段可以在同一个类中访问,即使是不同的实例。有关更多详细信息以及 Oracle 对此的官方声明,请参见此处。由于doStuff
是 的成员,因此它可以访问 的Foo
任何私有字段。Foo
private 修饰符指定该成员只能在其自己的类中访问[即使来自不同的实例]。[强调我的]
现在,由于的可见性修饰符,以下代码示例不起作用:text
class Bar{
public int baz;
public void doMoreStuff(Foo f){
System.out.println(f.text);
}
}
因为 doMoreStuff 是在Bar
, not中定义的Foo
。