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