- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:パッケージ間のアクセスが分かりません。)
パッケージ間のアクセスが分からない
このQ&Aのポイント
- SampleクラスとSampleImplクラスは別々のパッケージに属しており、変数numはprotectedで修飾されているため、アクセスできると思われます。しかし、SampleImplクラスが無名パッケージに属しているため、コンパイルエラーが発生しています。
- 解説によると、明示的にパッケージ宣言したクラスから、無名パッケージに属するクラスにアクセスしようとするとコンパイルエラーになります。無名パッケージはパッケージの一つであり、この2つのクラス間には継承関係があることからも、アクセスできると思われますが、実際にはできません。
- したがって、SampleImplクラスがSampleクラスにアクセスするためには、SampleImplクラスも明示的にパッケージ宣言をする必要があります。その上で、SampleImplクラスをコンパイルすると、エラーメッセージが表示されません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
このエラーはクラスメンバー(fieldとかmethod)の可視性に関する誤りではありません。 Sampleクラスを同一のパッケージにおいてもprotectedをpublicにしても同じエラーになります。 numはSampleクラスのインスタンスのフィールドです。 public static void main(...) { System.out.println(num); } 上のコードは「どのインスタンスのnumを参照しているのか?」と考えると間違いに気づけると思います。
その他の回答 (1)
- Taiyonoshizuku
- ベストアンサー率37% (183/489)
回答No.1
>明示的にパッケージ宣言したクラスから、無名パッケージに >属するクラスにアクセスしようとするとコンパイルエラーになります。 その通りだと思うんだけど。 >無名パッケージもパッケージの一つであり、 自分でも言ってる
質問者
お礼
返信ありがとうございます。
お礼
返信ありがとうございます。