我无法理解为什么这段代码不能编译:
class A {
public static void main(String[] args) {
System.out.println("hi");
}
}
private class B {
int a;
}
我将内容保存在名为的文件中A.java
- 我收到一个错误:
modifier private not allowed here // where I have defined class B
当我尝试将 B 设置为私有和受保护时,都会发生这种情况。有人可以向我解释一下这背后的原因吗?
Thanks !
来自Java语言规范 http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.1.1:
访问修饰符 protected 和 private 仅适用于直接封闭类声明中的成员类
所以是的,顶级类声明不允许使用 private 和 protected 修饰符。
顶层课程可能是公开的,也可能不是公开的,而private
and protected
不允许。如果该类被声明为公共,则可以从任何包中引用它。否则只能从同一个包(命名空间)中引用它。
私有顶级类没有多大意义,因为任何类都无法引用它。根据定义,它将无法使用。private
对于成员类来说,使一个类仅可引用它的封闭类是可以的。
受保护的成员类可以从 (1) 同一包的任何类和 (2) 封闭类的任何子类引用。将这个概念映射到顶级类是很困难的。第一种情况由没有访问修饰符的顶级类覆盖。第二种情况不适用于顶级类,因为没有封闭类或来自与该类有特殊关系的不同包的其他内容(如子类)。正因如此我认为,protected
不允许,因为它的基本概念不适用于顶级类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)