Javaにおけるクラス名とファイル名の関係


この問題は私が出会った間違い「The public type must be defined in its own file」で調べたものです.弟はJAVAを習ったばかりです.
publicクラスとしては、ファイル名と一致するソースファイルの広報クラス名がファイル名と同じである必要があります.
多くのネットユーザーがこのようにこの間違いを解決しているが、なぜだろうか.
JAVAにはpublicクラスは1つしかありません.ファイル名はこのクラスのクラス名と同じです.
1.      ,       public ,       

2.      ,     public 

3.      ,            (         public )

1つの.javaファイルは、複数のクラスを持つことができますが、ファイル名は1つしかありません.どのクラス名でファイル名として機能しますか?
実はファイル名はどうでもいいです.将来javacでコンパイルすると、最終的には複数の.classファイルが生成され、各クラスには.classファイルが対応します.実行時に対応する.classファイルを実行すればいいのですが、javaファイルは役に立たないように見えます(実行時には必要ありません)、名前にかかわらず.
ただし、クラスがpublicによって修飾されている場合、ファイル名はクラスと一致する必要があります(たとえばpublic class A{}はA.javaファイルにのみ配置できます.そうしないと、javacでコンパイルするときにエラーが表示されます.クラスAは共通であり、A.javaというファイルで宣言する必要があります).つまり、同じ.javaファイルに2つ以上のpublic classが現れるべきではありません.public classクラスがある場合は、ファイル名をこのような名前と同じにする必要があります.もしないならば、つまりすべてのclassはすべて修飾子がなくて、それではこのファイルに勝手に名前をつけることができて、甚だしきに至っては任意の1つのクラスと同名でなくてもいいことができて、漢字の名前でもいいですが、接尾辞はやはり.javaがあります(はは、信じないで試してみます).
注:多くの初心者(私も)はファイル名もmainメソッドのクラスと関係があると思っているかもしれませんが、実はそうではありません.mainメソッドはプログラムの1つのエントリにすぎません.先生は「1つのプログラムに1つのエントリしかない」と言っています.mainメソッドは1つしかないと言っているようですが、実は、あなたが喜ぶ限り、すべてのクラスにmainメソッドを書いて、プログラムにN以上のエントリを提供することができます.しかし、最後にプログラムを実行するときもその1つのエントリから入るしかありません.これがmainの役割です(プログラムエントリ).これは、プログラマーがユニットテストをするときに、自分で作った多くのクラスにmainメソッドを追加する理由です.彼が自分で作ったものに実行エントリを追加するので、テストを便利にすることができます.
publicクラスの場合、プロジェクト内のいずれかのクラスで参照できます.使用する前に、対応するclassファイルをimportするだけでいいです.クラス名とファイル名を1つずつ対応させると、仮想マシンが対応するパス(パッケージ名)で対応するクラスの情報を見つけるのが便利になります.そうしないと、探しにくくなり、オーバーヘッドも大きくなります