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

Mar*_*ius 4 java methods private access-modifiers

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

请使用以下代码:

class Foo {
  private String text;

  public void doStuff(Foo f) {
    System.out.println(f.text);
  }
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是,为什么f.text可以访问?这是一个私有领域,所以根据我的逻辑,它不应该,但IDE似乎认为它是.

ζ--*_*ζ-- 13

这是设计的.即使是不同的实例,也可以在同一个类中访问私有字段.有关详细信息,请参阅此处以及Oracle对此的正式声明.既然doStuff是其成员Foo,Foo则可以访问任何私有字段.

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

现在,下面的代码示例并没有因工作text的知名度修改:

class Bar{
  public int baz;
  public void doMoreStuff(Foo f){
    System.out.println(f.text);
  }
}
Run Code Online (Sandbox Code Playgroud)

因为doMoreStuff是定义的Bar,而不是Foo.