【发布时间】:2016-12-10 00:59:14
【问题描述】:
考虑以下 sn-p:
class Deep {
static class StaticInner {
}
class InnerClass {
}
public class InnerClass2 {
}
private class InnerClass3 {
}
protected class InnerClass4 {
}
}
public class Test {
public static void main(String args[]) {
Deep.StaticInner sc = new Deep.StaticInner(); // valid
Deep.InnerClass ic = new Deep.InnerClass(); // invalid
Deep.InnerClass2 ic2 = new Deep.InnerClass2(); // invlaid
Deep.InnerClass3 ic3 = new Deep.InnerClass3(); // invalid
Deep.InnerClass4 ic4 = new Deep.InnerClass4(); // invalid
}
}
除了 Deep 中名为 StaticInner 的静态类之外,所有其他嵌套类都需要封闭类 Deep 才能访问。换句话说,它们不能在Deep 之外访问(这是我的理解)。我见过程序员在嵌套内部类之前指定说明符。重点是什么?如果(非静态)内部类在封闭类之外根本无法访问,为什么要给出说明符(public、private、&protected)?为什么 Java 甚至支持内部类的访问说明符?
【问题讨论】:
-
重点是限制访问和曝光。例如
private class InnerClass3即使创建 Deep 实例也无法访问。 -
Deep.InnerClass ic = new Deep.InnerClass(); // invalid因为InnerClass不是静态的
标签: java inner-classes access-specifier