2013-07-01 16 views
4

我读Java文档here,这是我发现:“声明类”Java教程对于私有类错误吗?

您也可以在非常添加改性剂像公共私人开始,所以你可以看到的开行类声明可能变得相当复杂。修改器public and private,它决定了什么其他类可以访问MyClass,这些将在本课稍后讨论。

它指定我可以用privatepublic修饰符创建一个类。但是,当我尝试使用private修饰符时,我收到一条错误消息,指出它是该类谱带的非法修饰符:只允许使用public,abstractfinal

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

+2

这只是一个教程,而不是文档或规范。 –

+1

稍后会在同一教程中介绍。请参阅http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html –

+2

嗯,我认为这是不公平的。这个问题是非常合理的,因为OP的资源正在阅读,因为这些信息是很不正确的。确实,它在稍后才正确解释,但仍然不是downvote的理由。 –

回答

15

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

参见JLS

访问修饰符公共(6.6节)仅适用于顶层类 (第7.6节)并构件类(第8.5节),而不是本地类(§14.3)或 匿名类(第15.9.5节)。

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

0

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

0

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

例如

public class OuterClass{ 

    //constructors and methods of OuterClass 

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

} 
+0

所以你不能只有'class OuterClass'?你错了 – nachokk

+0

@nachokk你做一个公平的点(有点侵略性,但公平没有少),已经更正 –

+0

从来没有侵略性我不母语英语说话者可能是 – nachokk

3

你不能有一个private顶层类。你可以有一个private内部或嵌套类。

显然,一个private顶层类是有点没用,因为你不会被允许从任何地方访问它。

所以这是允许的

public class MyClass { 
    private class MyInnerClass { 
    } 
} 
0

私有类是允许的,但仅作为内或嵌套类。

1

这不是一个错误;看看措辞非常谨慎:

您还可以添加改性剂公共或私人在开始的时候-......

你可以有公共和默认(包私有,没有修饰词)常规类的知名度。嵌套的可以是私有的,也可以是预定义的。

+1

那么,这个声明的措辞并没有说明它是在谈论内部阶层。所以,这对初学者来说是相当具有误导性的。 –

+0

我同意,除非你仔细看,这措辞很不明确。 – Dynomyte

0

private被允许用于嵌套类:

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

“”“非法改性剂类;唯一的公共的,抽象的&最终被允许。”“”

顶端类不能be private

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

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

类名和文件名相同,当且仅类不是私人的,..

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

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

+0

您是否在发布之前尝试了此操作。无论文件名是什么,您都不能将顶级课程设置为私人课程。 –

+1

我知道,但是当我们有两节课或更多节课时,我正在说话 –

0

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

下面是一个完全有效的。

public class Foo 
{ 
    private class Bar 
    { 
    } 
}