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

时间:2013-06-29 20:18:44

标签: java methods private access-modifiers

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

请使用以下代码:

class Foo {
  private String text;

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

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

1 个答案:

答案 0 :(得分:13)

这是设计的。私有字段可以在同一个类中访问,即使是不同的实例也是如此。有关详细信息,请参阅here以及Oracle就此发表的官方声明。由于doStuffFoo的成员,因此可以访问Foo的所有私有字段。

  

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

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

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

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