web-dev-qa-db-ja.com

クラスはデフォルトでJavaおよびC ++でプライベートまたはパブリックですか?

クラスはデフォルトでJavaおよびC++でプライベートまたはパブリックですか?

26
the_learner
  • Java

    デフォルトでは、クラスの可視性はパッケージプライベートです。つまり、同じパッケージ内のクラスに対してのみ可視です。

  • C++

    クラスには、Javaのように定義された可視性はありません。それらをコンパイルユニットに含めた場合に表示されます。

38
zeller

Javaでは、トップレベルクラスはパブリックまたは非パブリックです。 「プライベート」はありません。 publicキーワードのみを使用するか、そのままにすることができます。そのままにしておくと、非公開になります。つまり、同じパッケージ内の他のクラスにのみ表示されます。

ネストクラス、つまり別のクラス内のクラスは、他のクラスメンバーと同様に、パブリック、パッケージプライベート、保護、またはプライベートにすることができます。デフォルト(つまり、修飾子のないもの)はpackage-privateであり、同じパッケージ内のクラスにのみ表示されます。

編集:C++の回答を忘れたので、@ zellerの回答を参照(および投票)してください。 :)

17
Ray Toal

JLSの6.6.1 によると、

最上位のクラスまたはインターフェイスタイプがパブリックとして宣言されていない場合は、それが宣言されているパッケージ内からのみアクセスできます。

したがって、Javaクラスはデフォルトでpackage-privateです。

ただし、これはC++には適用されません。クラスには可視性がありません。そのメンバーのみがアクセス制御できます。メンバーのアクセス制御については、C++ 11標準の§11を参照してください。 ¶1からの抜粋です...

クラスのメンバーは

  • private;つまり、その名前は、それが宣言されているクラスのメンバーおよびフレンドのみが使用できます。
  • protected;つまり、その名前は、それが宣言されているクラスのメンバーと友人、そのクラスから派生したクラス、およびその友人のみが使用できます(11.4を参照)。
  • public;つまり、その名前はアクセス制限なしでどこでも使用できます。
13
oldrinb