• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:パッケージ間のアクセスが分かりません。)

パッケージ間のアクセスが分からない

このQ&Aのポイント
  • SampleクラスとSampleImplクラスは別々のパッケージに属しており、変数numはprotectedで修飾されているため、アクセスできると思われます。しかし、SampleImplクラスが無名パッケージに属しているため、コンパイルエラーが発生しています。
  • 解説によると、明示的にパッケージ宣言したクラスから、無名パッケージに属するクラスにアクセスしようとするとコンパイルエラーになります。無名パッケージはパッケージの一つであり、この2つのクラス間には継承関係があることからも、アクセスできると思われますが、実際にはできません。
  • したがって、SampleImplクラスがSampleクラスにアクセスするためには、SampleImplクラスも明示的にパッケージ宣言をする必要があります。その上で、SampleImplクラスをコンパイルすると、エラーメッセージが表示されません。

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

  • ベストアンサー
  • KSOH
  • ベストアンサー率93% (29/31)
回答No.2

このエラーはクラスメンバー(fieldとかmethod)の可視性に関する誤りではありません。 Sampleクラスを同一のパッケージにおいてもprotectedをpublicにしても同じエラーになります。 numはSampleクラスのインスタンスのフィールドです。 public static void main(...) {  System.out.println(num); } 上のコードは「どのインスタンスのnumを参照しているのか?」と考えると間違いに気づけると思います。

taro_11
質問者

お礼

返信ありがとうございます。

その他の回答 (1)

回答No.1

>明示的にパッケージ宣言したクラスから、無名パッケージに >属するクラスにアクセスしようとするとコンパイルエラーになります。 その通りだと思うんだけど。 >無名パッケージもパッケージの一つであり、 自分でも言ってる

taro_11
質問者

お礼

返信ありがとうございます。

関連するQ&A