【问题标题】:Java - Class method can see private fields of same-class parameterJava - 类方法可以看到同类参数的私有字段
【发布时间】:2013-06-27 09:14:10
【问题描述】:

我遇到了一个相当奇怪的行为,不确定这是 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 对此的官方声明。由于doStuff 是Foo 的成员,因此它可以访问Foo 的任何私有字段。

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

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

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

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

【讨论】:

  • 有道理!链接页面实际上并没有您在 [] 中添加的位,但我想这就是他们所说的“它自己的类”的意思。感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
  • 2021-02-28
  • 2011-01-27
  • 1970-01-01
  • 2013-09-01
  • 2017-01-01
  • 2014-04-29
相关资源
最近更新 更多