2013-10-16 64 views
5

我想查询一下java中的类声明是否只能是public默认类声明 - 公共和默认

我读过一个文件里只能有一个public类,那个文件应该是这个类的名字。

例如Test.java

public class Test { 

} 

但我观察到,在一类,我可以没有public类,但可以有很多默认类。

例如Exam.java

class Exam { 

} 

class Examination { 

} 

为什么,我只能有一个public类,但可以有一个文件里面很多默认类?

+0

一个类只能被声明为public或者package private(如果没有修改被应用到它的声明中,它是包私有的)。除非是内部类或静态嵌套类,否则不能将类声明为“private”或“protected”。公共类需要保存在与类名称相同的文件中的类。 – Lion

回答

7

为什么我只能有一个公共类,但在一个文件中可以有多个默认类 ?

7.6. Top Level Type Declarations

该限制意味着必须有每 编译单元最多有一个这样的类型。 此限制使Java编译器 可以轻松找到包中的命名类。实际上,许多程序员 选择将每个类或接口类型放入其自己编译的 单元中,而不管它是否公开或由其他 编译单元中的代码引用。

如果一个类没有修饰符(默认修饰符),它只能从同一个包中访问。

+2

+1,默认为'package-private'。 –

+0

@sᴜʀᴇsʜᴀᴛᴛᴀ总是在那里改善答案:)谢谢。 – Maroun

3

这是另一个回答者指出的设计决定。这可以帮助您长期组织代码。尽管你可以有公共的内部类。