• ベストアンサー

クラス修飾子やアクセス修飾子を省略したパッケージ・プライベートは同じフォルダの下層フォルダにも公開するのですか?

 クラス修飾子やアクセス修飾子を省略したパッケージ・プライベートは同じフォルダの下層フォルダにも公開するのですか?  publicなどのクラス修飾子やアクセス修飾子を省略すると、同じフォルダ内のクラスにだけ公開されているパッケージ・プライベートなクラスなど(変数、メソッドとかのメンバを含む)になる、とのことですが、これは同じフォルダだけでなく同じフォルダの下層フォルダにも公開するのですか?  フォルダはパッケージのことです。 Windowsユーザーに分かりやすい言い方で記述しました。  よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#49664
noname#49664
回答No.1

>クラス修飾子やアクセス修飾子を省略したパッケージ・プライベートは同じフォルダの下層フォルダにも公開するのですか? 要するに、サブパッケージに対してもpublicか、ということですね。例えば、jp.hogeパッケージにあるパッケージプライベートなクラスは、jp.hoge.hogeパッケージ内のクラスに対してもpublicか?ということでしょうか。 これは「NO」です。パッケージプライベートは、文字通り「同一パッケージに対してのみpublic」です。サブパッケージは別のパッケージですからpublicではありません。 よく、継承などとごっちゃになってしまうのですが、パッケージには基本的に「階層に警鐘的な意味合いはない」と考えるべきです。jp.hogeとjp.hoge.hogeの間には、意味的な関係はありません。つまり、jp.hoge.hogeの中には、jp.hogeとはまったく無関係なクラスが入っていても別にかまわないのです。継承のサブクラスなどのように、何らかの関連があるわけではまったくありません。パッケージとしては、「まったく別のもの」でしかないわけです。 したがって、Javaでは「同一パッケージおよびサブパッケージ」のみをpublicにするアクセス修飾はない、ということです。

noname#179638
質問者

お礼

 Kyon2_PaPaさま、ご回答ありがとうございました。 >パッケージには基本的に「階層に警鐘的な意味合いはない」と考えるべき いままでよく分かりませんでしたけど、import文が階層をたどらないのもうなづけます。 import java.awt.*; import java.awt.event.*; のように。

関連するQ&A