44

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

4

9 回答 9

48

我注意到,如果不在课堂前写公开,它的工作方式与公开课相同。

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

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

于 2013-05-27T19:16:04.197 回答
40

public,protected并且private是访问修饰符。公共表示该主题可以被任何类访问,受子类保护,被类本身私有,没有修饰符意味着“包保护”,因此主题可以被同一个包中的类访问。

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

于 2013-05-27T19:17:46.740 回答
9

类是package private默认的(如此所述),因此它的行为方式不同。您只是认为这是因为您没有尝试从不同的包中使用您的课程。

于 2013-05-27T19:17:03.287 回答
3

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

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

于 2013-05-28T06:28:34.313 回答
1

它的工作原理相同,只是因为您可能只使用一个文件并且在同一个包中。

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

于 2015-07-27T18:31:45.523 回答
0

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

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

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

public class Student{
protected Note note;
}
于 2013-05-27T19:33:41.970 回答
0

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

就像是,

default class Student{}
于 2013-05-27T20:31:02.877 回答
0

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

于 2021-01-08T10:33:37.540 回答
0

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

于 2019-03-28T05:59:49.660 回答