【发布时间】:2013-05-27 19:14:56
【问题描述】:
我注意到,如果不在课前写public,它的工作方式与public class 相同。我不明白为什么会这样?当我没有将类声明为public、private 或protected 时,它应该会显示错误。但它工作正常。是什么原因?
【问题讨论】:
我注意到,如果不在课前写public,它的工作方式与public class 相同。我不明白为什么会这样?当我没有将类声明为public、private 或protected 时,它应该会显示错误。但它工作正常。是什么原因?
【问题讨论】:
我注意到,如果不在课程之前写 public,它的工作方式与公共课程一样。
不,它没有。除非它是公共的,否则该类对于不在同一个包中的其他代码是不可见的。默认的可访问性(不能明确指定)是类(或其他成员)仅对同一包中的其他代码可见。
您应该阅读Java Language Specification section 6.6 和Java Tutorial (Controlling Access to Members of a Class) 了解更多详情。
【讨论】:
public、protected 和 private 是访问修饰符。公共表示该主题可以被任何类访问,受子类保护,被类本身私有,没有修饰符意味着“包保护”,因此主题可以被同一个包中的类访问。
Subject 是类、方法、成员变量。
【讨论】:
private 或protected。
类默认为package private(如here 所述),因此其行为方式不同。你只是认为这是因为你没有尝试从不同的包中使用你的类。
【讨论】:
每个 .java 源文件必须只有一个公共类,并且文件名必须与该公共类匹配。
之前在 SO 上提出了类似的问题。请找here
【讨论】:
它的工作原理相同,只是因为您可能只使用同一个包中的一个文件。
如果您有多个包裹,那么您就有问题了。类名前没有“public”的类不能在另一个包中创建。你不能使用它的构造函数。您只是无法在创建类的包之外访问它。
【讨论】:
类的声明只有两个关键字:
只有在类中声明成员时,才能使用 private 和 protected。 示例:
public class Student{
protected Note note;
}
【讨论】:
如果您不提供访问修饰符,则默认情况下是包私有访问。该类在包外不可访问。理想情况下,JLS 应该包含一个用于包访问的关键字,以避免混淆和意外后果。
类似的,
default class Student{}
【讨论】:
普通类和公共类的工作方式不同。没有访问修饰符(例如 public)的类会自动设置为默认访问权限。(不,您不能显式将默认设置为访问权限)。如果您在包内创建默认访问类,则无法在该包外访问该类,但即使在该包外也可以访问公共类
【讨论】:
未使用任何访问修饰符声明的类在运行时自动声明为 DEFAULT
有了这些,类就可以访问同一个包
但不是任何其他包
【讨论】: