Java - 类方法可以看到同类参数的私有字段

5
我遇到了一个相当奇怪的行为,不确定这是Java问题还是Eclipse的问题。
请看以下代码:
class Foo {
  private String text;

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

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

基本上,不要假设一个语言的规则适用于另一种语言。相反,学习你正在使用的语言的规则。在这种情况下,查看Java语言规范对private含义的解释。 - Jon Skeet
就像你不可能不知道自己的名字一样,NetBeans是正确的。 - user2511414
我很好奇你的逻辑是什么。如果你能描述一下为什么你认为这是无效的,我们可以提供更好的解释。此外,在责怪IDE或编译器之前,请先怀疑自己的理解能力。 - lealand
1个回答

14

这是有意为之的。私有字段可在同一类中访问,即使是不同的实例。请参阅此处了解更多详细信息和Oracle的官方声明。由于doStuffFoo的成员,所以Foo的任何私有字段都可以被其访问。

private修饰符指定该成员只能在其自己的类中访问[即使是从另一个实例中访问]。[强调我添加的]

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

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

由于doMoreStuff是在Bar中定义的,而不是在Foo中。


有道理!链接的页面实际上没有你添加的那一部分[], 但我想这就是他们所说的“它自己的类”。感谢你的回答。 - Marconius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接