#publicクラスなのに同ソースコード内で呼び出せない?
お世話になっております。
java
1class Hoge { 2 //do something 3} 4 5class Sample { 6 public static void main(String[] args) { 7 //do something 8 } 9}
上記のソースコードは、特に問題なく実行できます。
しかし、classの前に修飾子publicを加えて以下のコードにして実行しようとすると...
java
1public class Hoge { 2 //do something 3} 4 5class Sample { 6 public static void main(String[] args) { 7 //do something 8 } 9}
The public type Hoge must be defined in its own fileJava(16777541)
というエラーがコード上のHogeクラスで出てしまい、コンパイル・実行ができなくなります。
publicのような修飾子を付けない場合、同パッケージ内においてはどのクラスからもアクセスできると記載されており、publicを付けると違うパッケージのクラスからもアクセスできるようになると記載されていました。
つまり、publicの方が何も付けない場合よりアクセスの制限が緩まるということかと思うのですが、それではなぜ、publicを付けるとエラーとなってしまうのでしょうか?
何も修飾子を付けない場合よりも制限が緩いはずのpublicを付けると、エラーが出てしまう理由を知りたいです。
どうか、宜しくお願いいたします。
#追記
試しにエラーのまま実行しようとしたところ、以下のエラーが表示されました。
エラー: クラス Hogeはpublicであり、ファイルHoge.javaで宣言する必要があります
publicをクラスの前に付けるとソースコードを分ける必要があるという理解をして、試しにコードを分けて1つのパッケージに入れて以下のコードを実行したところ、特に問題なく実行できました。
(ちなみに、Hogeクラスにpublicを付けない場合でも実行できました)
java
1package test; 2 3public class Hoge { 4 //do something 5}
java
1package test; 2 3class Hoge { 4 //do something 5} 6 7class Sample { 8 public static void main(String[] args) { 9 //do something 10 } 11}
しかし、それでも、制限が緩いはずのpublicを付けると同一ソースコード内で実行できなくなるのが未だに分かりません。
そういうものだと受け入れるしかないのでしょうか...?
どうか、ご回答のほど宜しくお願いいたします。
回答1件
あなたの回答
tips
プレビュー