`public class` 和 just `class` 有啥区别?

Posted

技术标签:

【中文标题】`public class` 和 just `class` 有啥区别?【英文标题】:what is the difference between `public class` and just `class`?`public class` 和 just `class` 有什么区别? 【发布时间】:2013-05-27 19:14:56 【问题描述】:

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

【问题讨论】:

This will provide you an adequate answer. 你可以参考这个链接,提供相同的知识:***.com/questions/614818/… 【参考方案1】:

我注意到,如果不在课程之前写 public,它的工作方式与公共课程一样。

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

您应该阅读Java Language Specification section 6.6 和Java Tutorial (Controlling Access to Members of a Class) 了解更多详情。

【讨论】:

【参考方案2】:

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

Subject 是类、方法、成员变量。

【讨论】:

如果主题是“***”类,则不能声明为privateprotected 这意味着私有类只能完全独立运行,对吧?【参考方案3】:

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

【讨论】:

【参考方案4】:

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

之前在 SO 上提出了类似的问题。请找here

【讨论】:

【参考方案5】:

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

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

【讨论】:

【参考方案6】:

类的声明只有两个关键字:

public .示例:公开课 Student//... 私有包(默认)。示例:class Note//...。仅在他的包中可见。

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

public class Student
protected Note note;

【讨论】:

【参考方案7】:

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

类似的,

default class Student

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

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

【讨论】:

虽然答案不正确,但它不会为此处发布的其他答案增加任何价值。

以上是关于`public class` 和 just `class` 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

JIT(just in time)即时编译器

C#里class和public class的区别

C#,class A 和public class A有啥区别?

java语言中的class和public class的区别

public class和class的区别

public class 和 class