【问题标题】: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 时,它应该会显示错误。但它工作正常。是什么原因?

【问题讨论】:

标签: java class


【解决方案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 有了这些,类就可以访问同一个包
                但不是任何其他包

                【讨论】:

                • 虽然答案不正确,但它不会为此处发布的其他答案增加任何价值。
                猜你喜欢
                • 2021-09-23
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2020-12-01
                • 1970-01-01
                • 1970-01-01
                • 2010-10-07
                • 1970-01-01
                相关资源
                最近更新 更多