Javaで2つのpublic classを持つプログラムを実行する方法
はじめに (対象読者・この記事でわかること)
この記事は、Javaでプログラミングを始めたばかりの初学者を対象にしています。
特に「1つのファイルに複数のクラスを書きたい」「public classとclassの違いがいまいち分からない」という方に向けて、2つのpublic classを持つプログラムを正しく実行する方法を解説します。
この記事を読むことで、Javaのファイル構成ルールと、複数クラスを管理するためのベストプラクティスが身につきます。
前提知識
この記事を読み進める上で、以下の知識があるとスムーズです。
- Javaの基本的な文法(クラス定義、mainメソッド)
- ターミナルでのjavac/javaコマンドの使い方
- テキストエディタでの簡単なプログラム作成経験
Javaのファイル構成ルールとpublic classの制限
Javaには「1ファイルにpublic classは1つまで」という厳格なルールがあります。
これはコンパイラがファイル名とpublic class名を一致させるためであり、2つ以上存在するとコンパイルエラー「class XXX is public, should be declared in a file named XXX.java」が発生します。
このルールを理解しないまま複数のpublic classを書くと、初心者は「なぜ動かないのか?」と戸惑いがちです。
そこで、まずはこの制限の理由と、それを回避するための正しいファイル分割方法を理解しましょう。
2つのpublic classを正しく実行する具体的手順
ステップ1:ファイルを分割する
Main.javaとSub.javaの2ファイルを作成します。
ファイル名とpublic class名を必ず一致させることで、コンパイルエラーを回避できます。
Java// Main.java public class Main { public static void main(String[] args) { Sub.greet(); } }
Java// Sub.java public class Sub { public static void greet() { System.out.println("Hello from Sub!"); } }
ステップ2:コンパイルと実行
ターミナルで以下のコマンドを実行します。
Bash# コンパイル(複数ファイルまとめて可能) javac Main.java Sub.java # 実行(mainメソッドを持つクラスを指定) java Main
ハマった点:1ファイルに2つのpublic classを書いてしまう
以下のように1ファイルに2つのpublic classを書くと、先に述べたエラーが発生します。
Java// Hoge.java public class Hoge { } // ファイル名と一致 public class Piyo { } // ファイル名と不一致 → コンパイルエラー
解決策:package-private classにする
publicを外した「package-private(デフォルト)クラス」にすると、1ファイルに複数定義できます。
Java// Hoge.java public class Hoge { } // ファイル名と一致 class Piyo { } // publicを外す
この場合、Hoge.javaのみでコンパイル・実行可能です。
Bashjavac Hoge.java java Hoge
ただし、package-privateクラスは同じパッケージ内からのみアクセス可能なため、大規模開発では推奨されません。
まとめ
本記事では、Javaで2つのpublic classを実行する際のルールと対策を解説しました。
- 1ファイルにpublic classは1つまで(ファイル名と一致必須)
- 複数public classが必要ならファイルを分割する
- publicを外せば同一ファイルに複数クラスを書けるが、アクセス制限に注意
この記事を通して、Javaのファイル構成ルールを理解し、コンパイルエラーを回避できるようになりました。
次回は、package-privateクラスを活用した実用的なユーティリティ構成について解説します。
参考資料
- Java公式チュートリアル - パッケージ
- The Java® Language Specification
- 山田祥典『Java入門教室』(技術評論社)
