Java - "ClassName"类和"public class ClassName"公共类的区别

28

什么是两者之间的区别?

class x {
    //code here
}

public class x {
    //code here
}
有时候我在网上看到一些示例,它们会用 public class 而不是 class 进行定义,这些示例都是简单的程序。我在我的作业中使用 class,其他人也是如此。

有时我在互联网上看到的示例会使用 public class 而不是 class,而它们都是一些简单的程序。我在我的作业中使用 class,其他人也是如此。


1
然后:如果我有一个X类(请将类名大写),未声明为public,我可以在其中拥有公共实例变量(例如public String name;)吗? ;) - Marsellus Wallace
4个回答

34

第一个选项将导致您的类被分配默认可见性,即 package-private(即:在同一 package 内可访问)。

第二个选项使其成为 public,也就是对任何其他类可见。

参考资料:控制类成员的访问权限


9

简单来说:

如果你的所有内容都在同一个包中(每个文件顶部的包名为com.myschool.myapp),那么就没有区别,但是如果有任何东西想要访问它所在包之外的内容,那么它必须是公共的。

例如,“String”在“java.lang”中,你的包几乎肯定不在java.lang中,因此如果String不是公共的,你就无法访问它。


5
  • 前者是“包可见性”或“默认可见性”,表示该类仅对同一包中的类可见。
  • 后者是“公共可见性”,表示该类对任何其他类都可见。

成员、方法和内部类也存在以下可见性修饰符:

  • “受保护可见性”与包相同,但继承具有受保护作用域定义的类的任何类也可以访问它。
  • “私有可见性”表示该类仅对自身可访问。

1
你不能将类声明为protectedprivate。让一个类只对自己可见有什么意义呢? - NullUserException
1
两个答案都是正确的。还有一个评论:尝试在两个类上放置“public” - 或者在一个类名上放置“public”,该类名与您的.java源文件名称不匹配 - 然后观察您将获得的编译错误 ;) - paulsm4
几乎。私有类也可以被其封闭类访问。值得注意的是,每个 .java 文件只能有一个公共类,如果一个 .java 文件包含一个公共类,则文件名必须与类名匹配。 - Ryan Stewart
1
@NullUser:当然可以有受保护和私有类。您在自己的答案中发布的链接清楚地表明了这一点。请撤销您的投票。这是一个好答案。 - Ryan Stewart
1
@NullUserExceptionఠ_ఠ - 如果它们是内部类,则可以使用受保护和私有类。 但是您无法拥有受保护或私有的顶级类。 - Jon Newmuis
显示剩余2条评论

0

第一个是默认类,即除了自身以外的任何其他包都无法访问它,但可以被同一包中的其他类访问。

第二个将其设为公共类,即您可以像访问不同包中的String和Array一样从任何包的任何类中访问它。

请记住,我们谈论的是从包中访问而不是类。

关于这点,如果我有一个名为X的类(请将类名大写),它没有声明为public,那么我可以在其中拥有公共实例变量(例如public String name;)吗?;)

当然可以,在非公共类中拥有公共实例变量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接