虽然这显然是一个RTFM案例,但不知怎的,我找不到一个解释这一切的简明来源。
public class Outer {
private class Inner {
}
}
私密类Inner
是公开类inner
的{{1}}类。
我的问题是来自“外面”以外的Outer
的可见性。
我应该能够在另一个班级中实例化Inner
吗?如果是,是否有任何限制(例如此类在同一个包中等)?
使用集合时,Inner
可以用作具体类型吗?例如,我是否应该能够在另一个班级中声明Inner
?
根据上述问题,如果另一个班级ArrayList <Inner>
extends Outer
出现?
答案 0 :(得分:5)
Inner是私有的,因此只有它的父母Outer可以做任何事情。
答案 1 :(得分:2)
这种情况下的“FM”是Java语言规范。您想要section 6.6.1,其中包括:
否则,如果成员或构造函数被声明为private,则当且仅当它发生在包含成员或构造函数声明的顶级类(第7.6节)的主体内时才允许访问。
因此构造函数可以在Outer
的声明中的任何位置调用(包括在Outer
声明的任何其他嵌套类中),但不能在其他任何地方调用。 Access不是继承的 - 它就像试图调用构造函数的源代码是否在Outer
的源代码中一样简单。