繁体   English   中英

“公共课”和“课”有什么区别?

[英]what is the difference between `public class` and just `class`?

我注意到,如果不在类之前写public ,它的工作方式与public class相同。 我不明白为什么会这样? 当我没有将类声明为publicprivateprotected时,它应该显示错误。 但它工作正常。 是什么原因?

我注意到,如果不在类之前写 public,它的工作方式与 public 类相同。

不,它没有。 除非它是公开的,否则不在同一个包中的其他代码将看不到该类。 默认的可访问性(无法明确指定)是一个类(或其他成员)仅对同一包中的其他代码可见。

您应该阅读Java 语言规范第 6.6 节Java 教程(控制对类成员的访问)以获取更多详细信息。

publicprotectedprivate是访问修饰符。 公共意味着主题可以被任何类访问,由子类保护,由类本身私有,没有修饰符意味着“包保护”,因此主题可以被同一包中的类访问。

主题是类、方法、成员变量。

类是package private默认情况下(如概述在这里),所以它的行为不一样。 你只是认为这是因为你没有尝试从不同的包中使用你的类。

每个 .java 源文件必须只有一个公共类,并且文件名必须与此公共类匹配。

之前在 SO 上问过类似的问题。 请在这里找到

它的工作原理是一样的,因为您可能只处理同一个包中的一个文件。

如果您有多个包裹,那么您就有问题了。 在类名之前没有“public”的类不能在另一个包中创建。 你不能使用它的构造函数。 您只是无法在创建类的包之外访问它。

对于类的声明,只有两个关键字可用:

  • public .Example: public class Student{//...}
  • 私有包(默认)。示例:class Note{//...} 。它仅在他的包中可见。

仅当您在类中声明成员时,才能使用 private 和 protected。 例子:

public class Student{
protected Note note;
}

如果您不提供访问修饰符,则默认情况下是包私有访问。 该类在包外不可访问。 理想情况下,JLS 应该包含一个用于包访问的关键字,以避免混淆和意外后果。

就像是,

default class Student{}

没有普通类和公共类的工作方式不同。没有访问修饰符(例如 public)的类会自动设置为默认访问权限。(不,您不能显式提供默认访问权限)。 如果您在包内创建默认访问类,则无法在该包外访问该类,但即使在该包外也可以访问公共类

未使用任何访问修饰符声明的类在运行时自动声明为 DEFAULT 使用这些类可以访问同一个包
但不是任何其他包

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM