`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
相同。我不明白为什么会这样?当我没有将类声明为public
、private
或protected
时,它应该会显示错误。但它工作正常。是什么原因?
【问题讨论】:
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】:public
、protected
和 private
是访问修饰符。公共表示该主题可以被任何类访问,受子类保护,被类本身私有,没有修饰符意味着“包保护”,因此主题可以被同一个包中的类访问。
Subject 是类、方法、成员变量。
【讨论】:
如果主题是“***”类,则不能声明为private
或protected
。
这意味着私有类只能完全独立运行,对吧?【参考方案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` 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章