質問: クラス宣言とアクセス制御 お世話になります。 独学でjavaの学習を始めました。 (仕事で必要になったためです) java のソースファイル名は、main メソッドを宣言するクラスの クラス名と一致させなければならないようですが、これは そのクラスを public をつけて宣言したときに限るのでしょうか? 以下のソースを「hello.java」という名前で保存し、コンパイルすると エラーが出ますが、「public」を削除して再びコンパイルすると、 コンパイルが通り、「test.class」が生成されます。 ********** public class test { public static void main (string args[]) { system.out.println("hello world"); } } ********** 同一パッケージ外からクラスを参照する場合、クラス名とソースファイル名を 一致させてあげないとクラスを見つけられない、ということなのでしょうか? とんちんかんな認識でしたら申し訳ありませんが、 ご教授頂ける方、宜しくお願い致します。 また、実際に java を使って開発されている方にお伺いしたいのですが、 現場では main メソッドを宣言するクラスのクラス名と、ソースファイルの ファイル名を一致させる、ということは常識というか、暗黙の了解みたいな ものなのでしょうか? (もちろんプロジェクト毎のコーディング規約によると思うのですが...)
回答: 本来、ソースファイルの名前とそれに含まれるクラスの名前とは無関係です。しかし、あなたのおっしゃるように、このままでは「あるクラスのソースファイルはどれなのかわからない」ということになってしまいます。 そこで、「ひとつのソースファイルに含まれる public なクラス・インタフェースはひとつまで」「public なクラス・インタフェースの名前とソースファイルの名前を一致させる」というように制限してもよい、と決められました。 実際、javac はそのように制限を設けて動作するようになっています。 なお、ソースファイルに public なクラス・インタフェースがない場合は、ファイル名に制限はありません。 また、main メソッド自身は public でなければなりませんが、そのクラスは public でなくてもかまいません。