我遇到了一个相当奇怪的行为,不确定这是 Java 问题还是 Eclipse 问题。
采用以下代码:
class Foo {
private String text;
public void doStuff(Foo f) {
System.out.println(f.text);
}
}
这里的问题是,为什么 f.text 是可访问的?这是一个私有(private)字段,所以按照我的逻辑,它不应该是,但 IDE 似乎认为它是。
最佳答案
这是设计使然。在同一个类中可以访问私有(private)字段,即使是不同的实例。参见 here有关详细信息和 Oracle 对此的官方声明。由于 doStuff
是 Foo
的成员,因此它可以访问 Foo
的任何私有(private)字段。
The private modifier specifies that the member can only be accessed in its own class [even from a different instance]. [emphasis mine]
现在,由于 text
的可见性修饰符,以下代码示例无法工作:
class Bar{
public int baz;
public void doMoreStuff(Foo f){
System.out.println(f.text);
}
}
因为 doMoreStuff 是在 Bar
中定义的,而不是 Foo
。
关于Java - 类方法可以看到同类参数的私有(private)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17384322/