私有类的“声明类”Java教程是错误的吗?

时间:2013-07-01 19:45:52

标签: java

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

  

您还可以在最开始添加修饰符,例如 public private ,这样您就可以看到类声明的开头行变得非常复杂。修饰符 public private ,用于确定其他类可以访问的内容MyClass,本课程稍后将对此进行讨论。

它指定我可以使用privatepublic修饰符创建一个类。但是,当我尝试使用private修饰符时,我收到一个错误,即它是该类别带的非法修饰符:仅允许publicabstractfinal

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

10 个答案:

答案 0 :(得分:15)

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

请参阅JLS

  

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

     

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

答案 1 :(得分:3)

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

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

所以这是允许的

public class MyClass {
    private class MyInnerClass {
    }
}

答案 2 :(得分:1)

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

你也可以在最开始时添加修饰符 ,如 公开或私有-...

您可以为常规类提供公开和默认(包私有,无修饰词)。嵌套的也可以是私有的或被检测到的。

答案 3 :(得分:1)

“”“该类的非法修饰符;只允许使用public,abstract和amp。final。”“”

顶级课程不能私有

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

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

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

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

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

答案 4 :(得分:0)

您可以拥有一个私有内部类,因此它适用。

答案 5 :(得分:0)

您可以将它们用于内部课程。我怀疑你试图将它用于顶级课程。 Here's an example of using private classes

答案 6 :(得分:0)

.java文件中的主要类不能是私有的(它将是一个无关的文件,因为它是私有的,毕竟它将如何使用)但是你可以拥有主类使用的内部类。这个文件可以是私有的。

例如

public class OuterClass{

    //constructors and methods of OuterClass

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

}

答案 7 :(得分:0)

允许使用私有类,但仅限于内部类或嵌套类。

答案 8 :(得分:0)

嵌套类允许

private

public class A {
    private B b;
    private class B {} // Only class A can use this class
}

答案 9 :(得分:0)

您可以将内部类视为私有。

以下是完全有效的。

public class Foo
{
    private class Bar
    {
    }
}