`public class`和`class`之间有什么区别?
我注意到如果不在类之前写public
,它的工作方式与public class
相同。 我不明白为什么会这样? 当我不将类声明为public
, private
或protected
时,它应该显示错误。 但它运作正常。 是什么原因?
public
, protected
和private
是访问修饰符。 公共意味着主题可以被任何类访问,受子类保护,类本身私有,没有修饰符意味着“包受保护”,因此主题可以由来自同一包的类访问。
主题是类,方法,成员变量。
我注意到如果不在类之前写公共,它的工作方式与公共类相同。
不,不。 除非它是公开的,否则对于不在同一个包中的其他代码,该类将不可见。 默认可访问性(无法明确指定)是类(或其他成员)仅对同一包中的其他代码可见。
您应该阅读Java语言规范部分6.6和Java教程(控制对类成员的访问)以获取更多详细信息。
默认情况下,类是package private
的(如此处所述),因此它的行为方式不同。 你只是认为这是因为你没有尝试从不同的包中使用你的类。
每个.java源文件必须只有一个公共类,文件名必须与此公共类匹配。
类似的问题在SO之前被问到。 请在这里找到它
对于类的声明,只能使用两个关键字:
- public 。例如:公共class学生{// …}
- 私有包(默认情况下)。例如:class Note {// …}。它只在他的包中可见。
只有在类中声明成员时,才可以使用private和protected。 例:
public class Student{ protected Note note; }
如果您没有提供访问修饰符,则默认为包私有访问。 该课程无法在课程外进行访问。 理想情况下,JLS应该包含一个用于包访问的关键字,以避免混淆和意外后果。
就像是,
default class Student{}
它的工作原理相同,因为您只使用一个文件并在同一个包中。
如果您有多个包,那么您就遇到了问题。 在类名称之前没有“public”的类不能在另一个包中创建。 你不能使用它的构造函数。 您无法在创建该类的包之外访问它。