4

我遇到了一个相当奇怪的行为,不确定这是 Java 问题还是 Eclipse 的问题。

采取以下代码:

class Foo {
  private String text;

  public void doStuff(Foo f) {
    System.out.println(f.text);
  }
}

这里的问题是,为什么 f.text 可以访问?这是一个私有字段,所以按照我的逻辑,它不应该是,但 IDE 似乎认为它是。

4

1 回答 1

13

这是设计使然。私有字段可以在同一个类中访问,即使是不同的实例。有关更多详细信息以及 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

于 2013-06-29T20:19:47.393 回答