我注意到,如果不在public
课前写作,它的工作方式与public class
. 我不明白为什么会这样?当我不将类声明为public
,private
或时,它应该显示错误protected
。但它工作正常。是什么原因?
9 回答
我注意到,如果不在课堂前写公开,它的工作方式与公开课相同。
不,它没有。除非它是公共的,否则不在同一个包中的其他代码将看不到该类。默认可访问性(不能明确指定)是类(或其他成员)仅对同一包中的其他代码可见。
您应该阅读Java 语言规范第 6.6 节和Java 教程(控制对类成员的访问)以获取更多详细信息。
public
,protected
并且private
是访问修饰符。公共表示该主题可以被任何类访问,受子类保护,被类本身私有,没有修饰符意味着“包保护”,因此主题可以被同一个包中的类访问。
主题是类、方法、成员变量。
类是package private
默认的(如此处所述),因此它的行为方式不同。您只是认为这是因为您没有尝试从不同的包中使用您的课程。
每个 .java 源文件必须只有一个公共类,并且文件名必须与该公共类匹配。
之前在 SO 上问过类似的问题。请在这里找到
它的工作原理相同,只是因为您可能只使用一个文件并且在同一个包中。
如果您有多个包裹,那么您就有问题了。类名前没有“public”的类不能在另一个包中创建。你不能使用它的构造函数。您只是无法在创建类的包之外访问它。
对于类的声明,只有两个关键字可用:
- public .Example: public class Student{//...}
- 私有包(默认)。示例:类注意{//...}。它只在他的包中可见。
只有在类中声明成员时,才能使用 private 和 protected。例子:
public class Student{
protected Note note;
}
如果您不提供访问修饰符,则默认情况下是包私有访问。该类在包外不可访问。理想情况下,JLS 应该包含一个用于包访问的关键字,以避免混淆和意外后果。
就像是,
default class Student{}
未使用任何访问修饰符声明的类在运行时自动声明为 DEFAULT 有了这些,该类可以在同一个包中访问,
但不能在任何其他包中访问
没有普通类和公共类不能工作相同。没有访问修饰符(例如 public)的类会自动设置为默认访问权限。(不,您不能明确将默认设置为访问权限)。如果您在包内创建默认访问类,则无法在该包外访问该类,但即使在该包外也可以访问公共类