4

我在这里阅读 Java 文档,这就是我发现的:

您还可以在开头添加诸如publicprivate之类的修饰符——因此您可以看到类声明的开头行可能变得相当复杂。修饰符publicprivate,它们决定了其他类可以访问什么MyClass,将在本课后面讨论。

它指定我可以使用privateorpublic修饰符创建一个类。但是,当我尝试使用private修饰符时,我收到一个错误,指出它是该类带的非法修饰符:仅public,abstract并且final是允许的。

我知道private修饰符没有用,但是为什么来自官方 Java 站点的本教程声明我可以使用它创建一个类?我错过了什么?

4

10 回答 10

15

顶级课程不能是private. 但是,嵌套类可以是private.

JLS

访问修饰符 public(第 6.6 节)仅适用于顶级类(第 7.6 节)和成员类(第 8.5 节),不适用于本地类(第 14.3 节)或匿名类(第 15.9.5 节)。

访问修饰符 protected 和 private(第 6.6 节)仅适用于直接封闭类或枚举声明(第 8.5 节)中的成员类。

于 2013-07-01T19:49:10.770 回答
3

您不能拥有private顶级课程。您可以有一个private内部或嵌套类。

显然,private顶级课程有些无用,因为您不允许从任何地方访问它。

所以这是允许的

public class MyClass {
    private class MyInnerClass {
    }
}
于 2013-07-01T19:49:40.837 回答
1

这不是一个错误;非常仔细地看措辞:

您还可以在最开始添加诸如public 或 private 之类的修饰符-......

您可以对常规类具有公共和默认(包私有,无修饰词)可见性。嵌套的也可以是私有的或受保护的。

于 2013-07-01T19:51:03.787 回答
1

"""类的非法修饰符;只允许 public、abstract 和 final .."""

顶级不能是私有的

当您尝试使用私有类的名称命名文件时..

您不能对文件和私有类使用相同的名称..

如果且只有类不是私有的,则类名和文件名相同,..

如果类是公共的,那么文件名和类名应该相同。

如果有很多公共类,文件名应该是公共类名..。

于 2013-07-01T19:53:52.567 回答
0

.java 文件中的主类不能是私有的(如果它是私有的,这将是一个毫无价值的文件,毕竟它将如何使用)但是您可以在文件中拥有主类使用的内部类,那些可以是私人的。

例如

public class OuterClass{

    //constructors and methods of OuterClass

    private class InnerClass{
           //constructors and methods of InnerClass
    }

}
于 2013-07-01T19:49:31.793 回答
0

允许私有类,但只能作为内部类或嵌套类。

于 2013-07-01T19:49:59.343 回答
0

private允许嵌套类:

public class A {
    private B b;
    private class B {} // Only class A can use this class
}
于 2013-07-01T19:51:09.390 回答
0

您始终可以将内部类设为私有。

下面是一个完全有效的。

public class Foo
{
    private class Bar
    {
    }
}
于 2013-07-01T19:56:42.930 回答
0

你可以有一个私有的内部类,所以它是适用的。

于 2013-07-01T19:49:13.363 回答
0

您可以将它们用于内部类。我怀疑你试图将它用于顶级课程。这是使用私有类的示例

于 2013-07-01T19:49:29.467 回答