为什么我们可以从外部类访问内部类中的变量?

时间:2012-07-21 01:31:46

标签: java

如果我在内部类中将变量声明为private,则该变量对外部类是可见的。我无法理解这里的逻辑。理想情况下,它是否只能在内部阶级中访问?

1 个答案:

答案 0 :(得分:0)

我认为答案是主观的,因为问题基本上似乎是为什么Sun / Oracle的语言设计师决定允许某种行为。

那就是说,这是一个尝试答案......

首先是一些术语,在类中声明的类是嵌套类。内部类是非静态嵌套类,必须驻留在外部类的实例中。所以内部类是外部类的一部分,从这个意义上说,内部类的所有成员都是外部类的成员。

http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

  

与实例方法和变量一样,内部类与其封闭类的实例相关联,并且可以直接访问该对象的方法和字段。此外,因为内部类与实例相关联,所以它本身不能定义任何静态成员。

另一个想法是内部类的有效用例排除了允许内部类隐藏外部类的成员的必要性。也就是说,没有任何概念认为外部类不会耦合到内部类。

为什么要允许private呢?因为私有成员仍然可以从其他类中隐藏,这些类可以访问内部类的实例。