【问题描述】:

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

取以下代码:

class Foo {
  private String text;

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

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

【问题讨论】:

标签: java methods private access-modifiers


【解答1】:

这是设计使然。私有字段可以在同一个类中访问,即使是不同的实例。请参阅here 了解更多详细信息以及 Oracle 对此的官方声明。由于 doStuffFoo 的成员,它可以访问 Foo 的任何私有字段。

<1234565>

private 修饰符指定该成员只能在其自己的类中访问[即使来自不同的实例]。 [强调我的]

现在,由于 text 的可见性修饰符,以下代码示例 起作用:

class Bar{
  public int baz;
  public void doMoreStuff(Foo f){
    System.out.println(f.text);
  }
}

因为 doMoreStuff 是在 Bar 中定义的,而不是在 Foo 中定义的。

【问题讨论】:

  • 有道理!链接页面实际上并没有您在 [] 中添加的位,但我想这就是他们所说的“它自己的类”的意思。感谢您的回答。