この質問は、クラス自体(メソッドやデータではない)をパブリックとして宣言する必要がある場所に関連しています。
現在、私はJavaの初心者で、非常に基本的なことだけを独学で学んでいます。私は他のいくつかの言語に精通していますが、Javaでは、1つのメインクラス(1つのファイル)のすべてのプログラムのように、非常に基本的なプログラムしか作成していません。
そこで今日、私は何か新しいことを試して、クラスを別々のファイルに入れることにしました。私が驚いたのは、クラスを別のファイルに配置したときに、「パブリック」とマークされていなくても、このクラスがメインプログラムにアクセスできることでした。
明確な例として、1つのフォルダーに2つのファイルしかない場合を考えてみましょう。以下を含むファイル「mainprog.java」:
class mainprog {
public static void main(String[] args) {
hello myHello = new hello();
myHello.sayHello();
}
}
そして、以下を含むファイル「hello.java」:
class hello {
void sayHello() {
System.out.println("Hello world");
}
}
「hello」の何もpublicとして指定されていませんが、これはコンパイルされ、
javac mainprog.java
java mainprog
だから私は、クラス定義に「パブリック」が本当に必要なのはどこか疑問に思っていますか?
新しい情報を追加するための編集 以下の回答で示唆されているように、異なるパッケージからファイルを作成するために、各ファイルに「package」ステートメントを追加してみました。予想通り、クラス「hello」とメソッド「sayHello()public」の両方を作成しない限り、クラス「hello」へのアクセスは拒否されました。ありがとうございました。