2012-07-21 157 views
3

如果我在内部类中声明一个变量为private,则该变量对外部类可见。我无法理解这里的逻辑。难道它不是理想的只能在内部课堂上访问吗?为什么我们可以从外部类访问内部类中的变量?

+1

@ wrschneider99我认为这个问题是不同的,因为它问*为什么*(使其成为语言设计问题) – 2012-07-21 02:11:13

+0

雅我实际上质疑这里的设计。我知道它可能访问内部类变量,但我想弄清楚他们为什么会这样做。 – user1527107 2012-07-21 15:43:52

+0

我想它已经在这里问过了...请在问之前做一些研究。 http://stackoverflow.com/questions/1801718/why-can-outer-java-classes-access-inner-class-private-members – Scorpion 2012-10-17 04:10:08

回答

0

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

这就是说,这里是一个答案,企图...

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

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

与实例方法和变量,一个内部类与它的封闭类的实例相关联的并且具有该对象的方法和字段的直接访问。另外,因为内部类与一个实例相关联,所以它不能自己定义任何静态成员。

另一个想法是,内部类的有效用例排除了允许内部类从外部类中隐藏成员的必要性。也就是说,没有观念认为外部阶级不会与内部阶级联系在一起。

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