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