java - 单个文件中的多个类 : modifier private not allowed here

标签 java access-modifiers

我无法理解为什么这段代码无法编译:

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 修饰符。

顶级类可以是公开的也可以不是,而privateprotected 是不允许的。如果类被声明为 public,则可以从任何包中引用它。否则只能从同一个包(命名空间)引用。

私有(private)顶级类没有多大意义,因为它不能被任何类引用。根据定义,它将无法使用。 private 可以让成员类使一个类仅引用它的封闭类。

protected 成员类可以从 (1) 同一包的任何类和 (2) 封闭类的任何子类中引用。将这个概念映射到顶级类是很困难的。第一种情况由没有访问修饰符的顶级类覆盖。第二种情况不适用于顶级类,因为没有封闭类或来自与此类有特殊关系的不同包的其他东西(如子类)。因此,我认为 protected 是不允许的,因为它的基础概念不适用于顶级类。

关于java - 单个文件中的多个类 : modifier private not allowed here,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3491131/

相关文章:

java - 编写 Java 库以有条件地处理输入类而不会导致对该类的无条件运行时依赖

java - 如何修复错误“反编译的 .class 文件字节码版本 52.0 (Java 8)

java - 扩展 jog4j RollingFileAppender rollOver() 访问级别时出现问题

c# - 从类访问对象

Java 定义一个明确的 package-private 修饰符

java - 默认包中定义的类的可访问性

java - 如何将幂函数添加到 sigma

java - Android 2.3.3 和 google map api v2 启动 Activity 时出错

java - Libgdx 非缩放全屏

java - Java 构造函数的默认访问修饰符