公共类的私有内部类的可见性

时间:2013-09-27 21:59:47

标签: java visibility inner-classes

虽然这显然是一个RTFM案例,但不知怎的,我找不到一个解释这一切的简明来源。

public class Outer {

   private class Inner {

   }

}

私密Inner公开inner的{​​{1}}类。

我的问题是来自“外面”以外的Outer可见性

  1. 我应该能够在另一个班级中实例化Inner吗?如果是,是否有任何限制(例如此类在同一个包中等)?

  2. 使用集合时,Inner可以用作具体类型吗?例如,我是否应该能够在另一个班级中声明Inner

  3. 根据上述问题,如果另一个班级ArrayList <Inner> extends Outer 出现

2 个答案:

答案 0 :(得分:5)

Inner是私有的,因此只有它的父母Outer可以做任何事情。

答案 1 :(得分:2)

这种情况下的“FM”是Java语言规范。您想要section 6.6.1,其中包括:

  

否则,如果成员或构造函数被声明为private,则当且仅当它发生在包含成员或构造函数声明的顶级类(第7.6节)的主体内时才允许访问。

因此构造函数可以在Outer的声明中的任何位置调用(包括在Outer声明的任何其他嵌套类中),但不能在其他任何地方调用。 Access不是继承的 - 它就像试图调用构造函数的源代码是否在Outer的源代码中一样简单。