38

默认情况下,Java 和 C++ 中的类是私有的还是公有的?

4

3 回答 3

49
  • 爪哇

    默认情况下,类的可见性是包私有的,即只对同一包中的类可见。

  • C++

    该类没有像 Java 中那样定义的可见性。如果您将它们包含在编译单元中,它们是可见的。

于 2012-09-09T05:43:33.117 回答
24

在 Java 中,顶级类要么是公共的,要么是非公共的。没有“私人”。您只能使用 public 关键字或将其关闭。如果您不使用它,它是非公开的,即仅对同一包中的其他类可见。

嵌套类,即另一个类内部的类,可以像任何其他类成员一样设为公共、包私有、受保护或私有。默认值(即没有修饰符的那个)是包私有的,仅对同一包中的类可见。

编辑:忘记了 C++ 答案,所以请参阅(并投票)@zeller 的答案。:)

于 2012-09-09T05:44:31.613 回答
15

根据JLS §6.6.1

如果顶级类或接口类型未声明为公共的,则只能从声明它的包内访问它。

因此,Java 类默认为package-private

但是,这不适用于 C++。一个类缺乏可见性——只有它的成员才能拥有访问控制。有关成员访问控制的信息,请参阅 C++11 标准的第 11 节。这是¶1的摘录...

一个类的成员可以是

  • private; 也就是说,它的名称只能被声明它的类的成员和朋友使用。
  • protected; 也就是说,它的名称只能由声明它的类的成员和朋友、从该类派生的类以及它们的朋友使用(见 11.4)。
  • public; 也就是说,它的名称可以在任何地方使用而不受访问限制。
于 2012-09-09T05:45:43.717 回答