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

标签 java methods private access-modifiers

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

采用以下代码:

class Foo {
  private String text;

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

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

最佳答案

这是设计使然。在同一个类中可以访问私有(private)字段,即使是不同的实例。参见 here有关详细信息和 Oracle 对此的官方声明。由于 doStuffFoo 的成员,因此它可以访问 Foo 的任何私有(private)字段。

The private modifier specifies that the member can only be accessed in its own class [even from a different instance]. [emphasis mine]

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

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

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

关于Java - 类方法可以看到同类参数的私有(private)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17384322/

相关文章:

ios - 方法代码未按正确顺序执行

iphone - 请求访问联系人的权限

Java:内部类访问彼此的私有(private)变量 - 封装外部 API 的良好实践?

java - 当窗口失去焦点时 JComboBox 保持打开状态

java - Android .apk 文件未完全从 .Net 服务器下载。在手机中获取包解析错误

c# - 在重载方法上使用泛型参数

javascript - 多个方法调用顺序回调的 meteor 模式

java - 引用私有(private)变量时,是否需要this.variableName声明?

java - 在MAVEN创建基于Spring的Java项目中调用bean文件时出现问题

java - 加载 JDBC-ODBC 驱动程序时出现异常