我无法理解为什么这段代码无法编译:
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 设为私有(private)和 protected 时,都会发生这种情况。有人可以向我解释这背后的原因吗?
谢谢!
最佳答案
来自Java Language specification :
The access modifiers protected and private pertain only to member classes within a directly enclosing class declaration
是的,顶级类声明不允许使用 private 和 protected 修饰符。
顶级类可以是公开的也可以不是,而private
和protected
是不允许的。如果类被声明为 public,则可以从任何包中引用它。否则只能从同一个包(命名空间)引用。
私有(private)顶级类没有多大意义,因为它不能被任何类引用。根据定义,它将无法使用。 private
可以让成员类使一个类仅引用它的封闭类。
protected 成员类可以从 (1) 同一包的任何类和 (2) 封闭类的任何子类中引用。将这个概念映射到顶级类是很困难的。第一种情况由没有访问修饰符的顶级类覆盖。第二种情况不适用于顶级类,因为没有封闭类或来自与此类有特殊关系的不同包的其他东西(如子类)。因此,我认为 protected
是不允许的,因为它的基础概念不适用于顶级类。
关于java - 单个文件中的多个类 : modifier private not allowed here,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3491131/