【问题标题】:Sibling nested classes in Java have access to each other's private membersJava中的兄弟嵌套类可以访问彼此的私有成员
【发布时间】:2012-08-10 23:56:09
【问题描述】:

我发现java中的两个嵌套类可以访问彼此的私有成员。为什么会这样?这是一个错误还是标准规定的?

以下代码编译运行无错误。

public class Main {
public static void main(String args[]) {
    A a = new A();
    a.var1 = 12;
    B b = new B();

    System.out.println(a.var1);
    b.printA(a);
}

private static class A {
    private int var1;
}

private static class B {
    private int var2;

    public void printA(A a) {
         // B accesses A's private variable
         System.out.println(a.var1);
    }

}

}

【问题讨论】:

  • 看看printA : B 访问a.var1A 中的私有对象
  • 虽然标准对这个问题并没有太具体,但 private 修饰符限制在当前类的文件中。

标签: java nested-class private-members


【解决方案1】:

是的,这是意料之中的。变量是私有的意味着它不能在Main 的范围之外被访问,但是它可以在这个范围内的任何地方被访问,以非常相似的方式,同一个类的两个实例可以访问彼此的私有成员。

【讨论】:

  • 啊.. 所以嵌套类不提供额外的范围。我想这从Main 可以访问它的事实中可以清楚地看出。
  • 没错。由于它们是在Main 中定义的,因此对它们进行限定是没有意义的,因为没有真正的“封装”(至少不同的单独的类提供的方式不同)。
  • 我希望有。谢谢您的帮助!!我会尽快接受你的回答(有 10 分钟的时间限制)
  • @Hugo “同一个类的两个实例可以访问彼此的私有成员”是什么意思。例子?
  • @hajder 在课堂上Bike,假设color 是私有的:public boolean compare(Bike anotherBike) { return this.color.equals(anotherBike.color) } 很好。
猜你喜欢
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
  • 2015-01-26
  • 2015-03-06
  • 2013-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多