`public class`和`class`之间有什么区别?

时间:2013-05-27 19:14:56

标签: java class

我注意到如果不在课前写public,它的工作方式与public class相同。我不明白为什么会这样?如果我没有将类声明为publicprivateprotected,则应显示错误。但它运作正常。是什么原因?

9 个答案:

答案 0 :(得分:31)

  

我注意到如果不在课前写公开,那就像公共课一样。

不,不。除非它是公开的,否则该类不会出现在不在同一个包中的其他代码中。默认的可访问性(不能明确指定)是一个类(或其他成员)只对同一个包中的其他代码可见。

您应该阅读Java Language Specification section 6.6Java Tutorial (Controlling Access to Members of a Class)了解更多详情。

答案 1 :(得分:29)

publicprotectedprivate是访问修饰符。公共意味着主题可以由任何类访问,受子类保护,私有类本身,没有修饰符意味着“包受保护”,因此主题可以由同一个包中的类访问。

主题是类,方法,成员变量。

答案 2 :(得分:4)

默认情况下,类为package private(如here所示),因此它的行为方式不同。你只是认为这是因为你没有尝试过从不同的包中消费你的类。

答案 3 :(得分:1)

每个.java源文件必须只有一个公共类,文件名必须与此公共类匹配。

之前就问过类似的问题。请找到它here

答案 4 :(得分:0)

对于类的声明,只能使用两个关键字:

  • 公开。例如:公共班学生{//...}
  • 私有包(默认情况下)。例如:class Note {// ...}。它只在他的包中可见。

只有在类中声明成员时,才能使用private和protected。 例如:

public class Student{
protected Note note;
}

答案 5 :(得分:0)

如果您不提供访问修饰符,则默认为包私有访问。在课程外无法访问该课程。理想情况下,JLS应该包含一个关键字,以避免混淆和意外后果。

类似的东西,

default class Student{}

答案 6 :(得分:0)

它的工作方式相同,因为您只使用一个文件并在同一个包中。

如果您有多个包裹,那么您就遇到了问题。没有" public"在无法在另一个包中创建类的名称之前。你不能使用它的构造函数。您无法在创建该类的包之外访问它。

答案 7 :(得分:0)

没有普通类和公共类不能同时工作。没有访问修饰符的类(例如public)会自动设置为默认访问权限(不,您不能显式提供默认访问权限)。如果您在包内创建默认访问类,则无法在该包外访问该类,但是即使在该包外也可以访问公共类

答案 8 :(得分:0)

未使用任何访问修饰符声明的类在运行时自动声明为 DEFAULT 有了这些,就可以访问同一个包
但不是任何其他包