我在同一个java文件中创建了一个公共和私有类。它没有被编译。但是,如果我保留一个公共类和一个没有访问说明符的类。它会被编译。这是什么原因?
答案 0 :(得分:9)
Toplevel私有类是无稽之谈,因为没有其他类可以访问此类。这就是你得到编译错误的原因..
JLS声明;
访问修饰符受保护和 private仅适用于成员类 在直接封闭的课程中 声明(§8.5)并进行了讨论 在§8.5.1。
答案 1 :(得分:4)
如果您尝试创建一个结构化的.java文件,以便根结构中有多个公共类定义或私有类定义,如下所示:
public class SomeClass { ... }
public class SomeOtherClass { ... }
或
private class SomePrivateClass { ... }
会有错误。但是,您可以在公共类类中定义私有类,如下所示:
public class SomePublicClass {
private class SomePrivateClass { ... }
...
}
在java文件中只有一个基类,这将编译。
编辑:根据Joachim Sauer的评论更正了有关法律类结构的信息。
答案 2 :(得分:0)
将外部类指定为private
是违法的。如果没有访问修饰符,则默认只能从同一个包中访问。
更多信息:http://en.wikibooks.org/wiki/Java_Programming/Access_Modifiers
答案 3 :(得分:0)
除非包含在另一个类中,否则不能声明类private。这是按规范JLS - 8.1.1 Class Modifiers